X-Git-Url: http://git.piffa.net/web?p=sketchbook_andrea;a=blobdiff_plain;f=advanced_projects%2Fstate_machine%2Fsemaforo_4_doppio_single_FSM%2Fsemaforo_4_doppio_single_FSM.ino;fp=advanced_projects%2Fstate_machine%2Fsemaforo_4_doppio_single_FSM%2Fsemaforo_4_doppio_single_FSM.ino;h=de798b35e0d1751dffbaa74e54d4adb8e776e974;hp=0ab3b51938947e2ed4949a1ac94ecd8052c8493b;hb=75928e346c7e5631544b0bea01e2d4ae9a5d749e;hpb=7467d081c3e1ca22c977f50d81b5167dbe432f2a diff --git a/advanced_projects/state_machine/semaforo_4_doppio_single_FSM/semaforo_4_doppio_single_FSM.ino b/advanced_projects/state_machine/semaforo_4_doppio_single_FSM/semaforo_4_doppio_single_FSM.ino index 0ab3b51..de798b3 100644 --- a/advanced_projects/state_machine/semaforo_4_doppio_single_FSM/semaforo_4_doppio_single_FSM.ino +++ b/advanced_projects/state_machine/semaforo_4_doppio_single_FSM/semaforo_4_doppio_single_FSM.ino @@ -20,11 +20,11 @@ const byte input = 2; // PIN del bottone int pausa = 3000; long timer ; +boolean wait = 0; // Memoria bottone + enum states_available { // Stati della FMS turn_green, // Dinamico, transizione green, // Statico - wait_button, // Evento - Stimolo - turn_yellow, // Dinamico, transizione yellow, // Statico turn_red, // Dinamico, transizione turn_sec_yellow,// Yellow per semaforo secondario @@ -32,7 +32,7 @@ enum states_available { // Stati della FMS red // Statico }; -states_available state ; +states_available state ; void setup() { @@ -54,29 +54,22 @@ switch (state) { break; case green: - if (millis() - timer => pausa * 2/3) { - state = wait_button ; - timer += pausa * 2/3 ; - } - break; + led.Green(); + if (wait && (millis() - timer >= pausa * 2/3)) { + state = yellow; + timer = millis(); + } - case wait_button: - if (digitalRead(input) == LOW) { - delay(20); // Debouncing, si potrebbe fare con millis() - state = turn_yellow ; // Il passaggio di stato avviene alla pressione di un bottone - timer = millis(); - }; - - break; - - case turn_yellow : - led.Yellow(); - state = yellow ; - break; + if (digitalRead(input) == LOW) { + wait = 1; + } + break; case yellow : + led.Yellow(); if (millis() - timer >= pausa / 3) { state = turn_red ; + wait = 0; timer += pausa / 3; } break;