Paso 4: Discusión de código
Esta sección describe las diversas variables y constantes que vamos a utilizar. Tenga en cuenta que he utilizado byte const en lugar de int. La razón es, es que los microcontroladores tienen muy limitado espacio de almacenamiento. Valores de int pueden tomar hasta 28 bytes, donde como un byte de valor puede almacenar un número entre 1 y 255 y sólo toma... 1 byte. Usé la etiqueta int para touchThreshold porque me metía a valores mayores que 255 volvió.Byte const se utiliza, porque dice el compilador optimizador almacenamiento uso.
byte const LEDPin = 11; Pin de salida de PWM para LED
capSensePin byte const = 2; PIN para conectar al sensor capacitivo
modo de byte = 0; Determina el brillo del LED. 0 es. Varía entre 0 y 255.
int touchThreshold = 100; Valor mínimo táctil capacitiva para activar modo siguiente
byte targetBrightness = 0; Conjunto poder en brillo
byte currentBrightness = 0;
Void setup ejecuta una vez y asignar pinModes etc.. Empiezo al serial monitor aquí porque yo estaba usando para disparar problemas.
void setup() {}
Serial.Begin(9600);
pinMode (LEDPin, salida); Establece LEDPin en modo salida
}
void loop() {}
Este es el bucle del programa principal. Mantiene repitiendo y pasando por las distintas líneas de código.
Si (readCapacitivePin(capSensePin) > touchThreshold) {//If el valor de capSensePin superior a touchThreshold entonces hacer...
Delay(250);
Botón Debounce. ¿Cómo sería eliminar esta rotura usando millis()??
modo ++; Si se supera el umbral táctil, aumentar valor del modo 1
Esta sección siguiente describe los diferentes niveles de brillo de LED. Dos == en una fila dice el procesador para comparar dos valores.
Si el modo (modo > 3) = 0; Si el valor de modo es > 3 entonces ajuste de modo a 0.
Si (modo == 0) targetBrightness = 0;
Si (modo == 1) targetBrightness = 255;
Si (modo == 2) targetBrightness = 128;
Si (modo == 3) targetBrightness = 64;
Serial.Print ("el modo actual es..."); Aumenta el serial monitor a modo de bebug
Serial.println(Mode); Imprimir valor de modo monitor seial
}
Porción de Fade
Si (targetBrightness > currentBrightness) currentBrightness ++; Si la luminosidad del objetivo es menor que el actual brillo, entonces + 1 brillo //current
Si (targetBrightness < currentBrightness) currentBrightness--;
analogWrite (LEDPin, currentBrightness); PWM salida LEDPin. Esto cambia el brillo de la luz
Delay(3);
Serial.println(currentBrightness);
ESTE PUNTO HACIA ADELANTE NO ESCRIBO. Fue incluido en el ejemplo de arduino.
Cada 500 ms, imprimir el valor del sensor capacitivo
Si ((millis() % 500) == 0) {}
Serial.Print ("Sensor capacitivo en el Pin 2 se lee:");
Serial.println(readCapacitivePin(capSensePin));
}
}
readCapacitivePin
Entrada: Número de pin Arduino
Salida: Un número de 0 a 17 expresan
Cuánta capacidad está en el pin
Al tocar el pin, o lo que tengas
Unido a él, el número se obtendrá mayor
En orden para que funcione ahora,
El pin debe tener un 1 + Megaohm resistencia tracción
up a + 5v.
uint8_t readCapacitivePin (int pinToMeasure) {}
Se trata de cómo se declara una variable que
llevará a cabo los registros del puerto, PIN y DDR
en un AVR
Puerto de uint8_t volátiles *;
uint8_t volátiles * ddr;
uint8_t volátiles * pin;
Aquí traducimos el número de pin de entrada de
Número de pin del Arduino al puerto de AVR, PIN, DDR,
y que poco de estos registros nos importa.
máscara de bits bytes;
Si ((pinToMeasure > = 0) & & (pinToMeasure < = 7)) {}
Puerto = & PORTD;
DDR = & DDRD;
máscara de bits = 1 << pinToMeasure;
PIN = & PIND;
}
Si ((pinToMeasure > 7) & & (pinToMeasure < = 13)) {}
Puerto = & PORTB;
DDR = & DDRB;
máscara de bits = 1 << (pinToMeasure - 8);
PIN = & PINB;
}
Si ((pinToMeasure > 13) & & (pinToMeasure < = 19)) {}
Puerto = & PORTC;
DDR = & DDR;
máscara de bits = 1 << (pinToMeasure - 13);
PIN = & PINC;
}
Descarga primero el pin poniendo baja y salida
* Puerto & = ~ (máscara);
* ddr | = máscara;
Delay(1);
Hacer el pin una entrada sin el pull-up interno en
* ddr & = ~ (máscara);
Ahora a ver cuánto tiempo el pin Haz tirado para arriba
ciclos de int = 16000;
para (int i = 0; i < ciclos; i ++) {}
Si (* pin & máscara) {}
ciclos = i;
rotura;
}
}
Descarga el perno otra vez poniendo baja y salida
Es importante dejar los pernos bajos si quiere
ser capaz de tocar más de 1 sensor a la vez-
el sensor quedo tirado alto, cuando te toque
dos sensores, su cuerpo transferirá la carga entre
sensores.
* Puerto & = ~ (máscara);
* ddr | = máscara;
volver a ciclos;
}