Yo uso un Arduino Uno y lo ha configurado para trabajar con interrupciones en los pines digitales 2, 3, 4 y 5 de acuerdo a una explicación1 que he encontrado.
void setup()
contiene el código siguiente para la instalación de las interrupciones.
//Endable Interrupts for PCIE2 Arduino Pins (D0-7)
PCICR |= (1<<PCIE2);
//Setup pins 2,3,4,5
PCMSK2 |= (1<<PCINT18);
PCMSK2 |= (1<<PCINT19);
PCMSK2 |= (1<<PCINT20);
PCMSK2 |= (1<<PCINT21);
//Trigger Interrupt on rising edge
MCUCR = (1<<ISC01) | (1<<ISC01);
Y ahora, el ISR( PCINT2_vect ), la función está activa en cada interrupción. Que funciona como un encanto. Mi pregunta es, ¿cuál es la mejor/forma más rápida de averiguar, que el pin se activa?
He encontrado algo en Re: Es mejor usar ISR(PCINT2_vect) o attachInterrupt en los pines 2, 3?, pero no entiendo el código y no funciona fuera de la caja. Pero se ve impresionante...
¿Cuál es la solución?
[2] http://arduino.cc/forum/index.php/topic,72496.15.html#lastPost
Editar:
Por el momento, me estoy leyendo el estado de los pines de la clavija de entrada del registro:
if (PIND & 0b00000100)
Serial.println( "PIN 2" );
if (PIND & 0b00001000)
Serial.println( "PIN 3" );
if (PIND & 0b00010000)
Serial.println( "PIN 4" );
if (PIND & 0b00100000)
Serial.println( "PIN 5" );
En el final, quiero contar las interrupciones en las patas. Pero, ¿cómo puedo asegurar, que no hay contados dos veces?