Estoy usando el pin analógico 5 de Arduino para detectar las pulsaciones de 6 pulsadores. En la imagen el botón de arriba a la derecha es el número 1 y luego de derecha a izquierda van como 2, 3, 4, 5, 6. El programa debe imprimir 0 cuando ninguno de los botones es presionado y si uno de ellos es presionado, debe imprimir su posición como mencioné antes. Actualmente el problema es que si pulso, por ejemplo, el segundo botón, a veces (en lugar de una sola vez) imprime 2 un par de veces. Supongo que es por el "ruido" que se produce al pulsar el botón y que debería ser desbordado, pero no sé cómo desbordar el pin analógico.
Mi código:
int old_button = 0;
int button;
int pressed_button;
int z;
void setup () {
Serial.begin(9600);
pinMode(A5, INPUT);
}
void loop () {
z = analogRead(5);
if (z > 1021) button = 0;
else if (z > 511 && z < 514) button = 1;
else if (z > 680 && z < 684) button = 2;
else if (z > 766 && z < 770) button = 3;
else if (z > 817 && z < 822) button = 4;
else if (z > 851 && z < 856) button = 5;
else if (z > 875 && z < 880) button = 6;
else button = 0;
if (old_button == button) {
old_button = button;
pressed_button = 0;
}
else {
old_button = button;
pressed_button = button;
}
Serial.println(pressed_button);
}
Circuito (resistencias de 2200 ohmios):
1 votos
Un esquema eléctrico sería mejor que un diagrama de Fritzing, en este caso concreto. Utiliza el editor de esquemas incorporado.
1 votos
@Mate Sólo para que lo sepas. Ahora hay una pila especializada en Arduino: arduino.stackexchange.com
0 votos
¿Puede esta solución funcionar con el modo DEEP SLEEP (utilizando 0,2 uA de media con un ATmega o ATtiny en breadboard), y con el Pin Change Interrupt (PCINT)?