4 * Utilizzo di un interrupt ala Arduino per intercettare
5 * la pressione di un bottone.
7 * Doppia ISR: la prima ISR intercetta FALLING
8 * e riconfigura l'interrupt con RISING a una seconda
9 * ISR che a sua volta ripristina il comportamento
13 const byte ledPin = 13;
14 const byte interruptPin = 2; // Arduino 328 / 168
15 volatile boolean state = 0 ; // volatile evita che la variabile possa
16 // avere valori diversi in SRAM e in un registro,
17 // evita che il compilatore in fase di ottimizzazioe la consideri
18 // come const nel loop()
22 pinMode(ledPin, OUTPUT);
23 pinMode(interruptPin, INPUT_PULLUP); // Vedi: digitalPinToInterrupt()
24 attachInterrupt(0, eventoFall, FALLING);
25 // Partiamo intercettanto un interrupt FALLING
30 digitalWrite(ledPin, state);
31 // La variabile state viene richiamata fuori dalla ISR
32 // quindi deve essere dichiarata volatile
35 void eventoFall() // Sempre VOID
38 attachInterrupt(0, eventoRise, RISING);
41 void eventoRise() // Sempre VOID
44 attachInterrupt(0, eventoFall, FALLING);