1 /* Toggle con transizioni tra On | OFF
4 1 Lampeggiatore in coda.
7 1 interruttore su interrupt 0 per accensione / spegnimento luci
9 FSM per la gesrione delle transizioni tra i 2 stati.
15 // FSM gestione interruttore luci
16 enum { // Stati della FMS
18 toOff, // Trans On -> Off
20 toOn // Trans OFF -> On
23 // Variabili per interrupt 0
24 volatile unsigned int chValue = 1500; // Valore computato
25 volatile unsigned int chStart = 1500; // Inizio rilevamento
26 const int soglia = 1400; // soglia per scatto toggle a 2 posizioni
29 unsigned long FSM_lastMillis = 0 ; // Timestamp per la FSM degli alettoni
30 unsigned long pausa = 2000; // Pausa per la transizione durante gli stati 2, 4 della FSM
32 // Instanziamo gli oggetti per gli stati On / Off
33 Lampeggiatore coda = 9;
35 // Instanziamo gli oggetti per gli stati di transizione
39 // I PINs vengono impostati dal constructor al momento
40 // della dichiarazione dell'ogetto.
42 right.Invert() ; // Opzionale: inverte l'ordine del lampeggio da
43 // HI -> LOW --> LOW -> HI
44 // per avere 2 LED che lampeggiano alternativamente
54 if (chValue > soglia) {
55 FSM_lastMillis = millis();
62 coda.Blink(1000); // Lampeggio in 1000ms = 1 secondo
64 if (chValue <= soglia) {
65 FSM_lastMillis = millis();
74 if (chValue > soglia && currentMillis - pausa > FSM_lastMillis ) {
76 } else if (chValue <= soglia) {
85 if (chValue <= soglia && currentMillis - pausa > FSM_lastMillis ) {
87 } else if (chValue > soglia) {
96 attachInterrupt(0, chFall, FALLING);
101 attachInterrupt(0, chRise, RISING);
102 chValue = micros() - chStart;