1 /* Toggle con transizioni tra On | OFF con interrupt
4 Sketch di esempio per accensione spegnimento di tutto l'impianto luci
5 tramite un interruttore a due posizioni della radio.
8 1 Lampeggiatore in coda in PWM
11 1 interruttore su interrupt 0 per accensione / spegnimento luci
13 FSM per la gesrione delle transizioni tra i 2 stati.
19 // FSM gestione interruttore luci
20 enum { // Stati della FMS
22 toOff, // Trans On -> Off
24 toOn // Trans OFF -> On
27 // Variabili per interrupt 0
28 volatile unsigned int chValue = 1500; // Valore computato
29 volatile unsigned int chStart = 1500; // Inizio rilevamento
30 const int soglia = 1400; // soglia per scatto toggle a 2 posizioni
33 unsigned long FSM_lastMillis = 0 ; // Timestamp per la FSM degli alettoni
34 unsigned long pausa = 2000; // Pausa per la transizione durante gli stati 2, 4 della FSM
36 // Instanziamo gli oggetti per gli stati On / Off
37 Lampeggiatore coda = 9;
39 // Instanziamo gli oggetti per gli stati di transizione
53 if (chValue > soglia) {
54 FSM_lastMillis = millis();
61 coda.Blink(1000); // Lampeggio in 1000ms = 1 secondo
63 if (chValue <= soglia) {
64 FSM_lastMillis = millis();
73 if (chValue > soglia && currentMillis - pausa > FSM_lastMillis ) {
75 } else if (chValue <= soglia) {
84 if (chValue <= soglia && currentMillis - pausa > FSM_lastMillis ) {
86 } else if (chValue > soglia) {
95 attachInterrupt(0, chFall, FALLING);
100 attachInterrupt(0, chRise, RISING);
101 chValue = micros() - chStart;