Uso un Arduino Uno e l' ho già configurato per funzionare con interruzioni sui pin digitali 2, 3, 4 e 5 secondo una spiegazione 1 che ho trovato.
void setup()
contiene il seguente codice per impostare gli interrupt.
//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);
E ora, la funzione ISR (PCINT2_vect) viene attivata ad ogni interruzione. Funziona come un fascino. La mia domanda è: qual è il modo migliore / più veloce per scoprire quale pin è stato attivato?
Ho trovato qualcosa in Re: è meglio usare ISR (PCINT2_vect) o attachInterrupt sui pin 2, 3? , ma non capisco il codice e non funziona immediatamente. Ma sembra impressionante ...
Qual'è la soluzione?
[2] http://arduino.cc/forum/index.php/topic.72496.15.html#lastPost
Modificare:
Al momento, sto leggendo lo stato del pin dal registro pin di input:
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" );
Alla fine, voglio contare gli interrupt sui pin. Ma come posso assicurare che non ci siano conteggi due volte?