Utilizo un Arduino Uno y ya lo configuré para que funcione con interrupciones en los pines digitales 2, 3, 4 y 5 de acuerdo con la explicación 1 que encontré.
void setup()
contiene el siguiente código para configurar 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, la función ISR (PCINT2_vect) se activa en cada interrupción. Eso funciona como un amuleto. Mi pregunta es, ¿cuál es la forma mejor / más rápida de averiguarlo, qué pin se activó?
Encontré algo en Re: Es mejor usar ISR (PCINT2_vect) o attachInterrupt en pines 2, 3? , pero no entiendo el código y no funciona de la caja. Pero se ve impresionante ...
¿Cuál es la solución?
[2] enlace
Editar:
En este momento, estoy leyendo el estado del pin desde el registro del pin de entrada:
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" );
Al final, quiero contar las interrupciones en los pines. Pero, ¿cómo puedo asegurar que no se cuentan dos veces?