Tengo que escribir un sketch de Arduino para realizar algunas tareas con el número de pulsos digitales detectado por un pin. Para este propósito, decidí usar las interrupciones en el fin de no perderse ningún pulso y realizar el resto del algoritmo prácticamente al mismo tiempo.
Con el fin de hacer una prueba rápida, me puse en este circuito:
y me ha cargado este boceto (basado en el ejemplo de la attachInterrupt
documentación):
volatile unsigned int pulses=0;
void setup() {
attachInterrupt(0, countpulses, FALLING); // interrupt 0 = pin 2
Serial.begin(9600);
}
void loop() {
Serial.println(pulses);
delay(500);
}
void countpulses() {
pulses++;
}
Lo que me espera aquí es que cada vez que presione y suelte el interruptor (y el led rojo se enciende y se apaga), debe leer una de pulso. Lo extraño es que se cuenta de dos pulsos en lugar de ello, es decir, que se trata de un pulso por cada cambio de estado en lugar de sólo por la "caída".
Es esta una cuestión de código o es debido a que el interruptor? Tengo el mismo problema de la manipulación directa de las señales digitales en el pin 2?