X-Git-Url: http://git.piffa.net/web?p=sketchbook_andrea;a=blobdiff_plain;f=advanced_projects%2Fstate_machine%2Fsemaforo_2_1_doppio%2Fsemaforo_2_1_doppio.ino;fp=advanced_projects%2Fstate_machine%2Fsemaforo_2_1_doppio%2Fsemaforo_2_1_doppio.ino;h=0000000000000000000000000000000000000000;hp=412e11f443452e34a1d22e22a614970c993541ca;hb=8a90a5875d2fcf8db21835920d57f97a4bca0ade;hpb=92687f500a1e7aed1fe35540e4f4aee5f8bcf6a1 diff --git a/advanced_projects/state_machine/semaforo_2_1_doppio/semaforo_2_1_doppio.ino b/advanced_projects/state_machine/semaforo_2_1_doppio/semaforo_2_1_doppio.ino deleted file mode 100644 index 412e11f..0000000 --- a/advanced_projects/state_machine/semaforo_2_1_doppio/semaforo_2_1_doppio.ino +++ /dev/null @@ -1,100 +0,0 @@ -/* - Incrocio RGB - - Un incrocio costituito da due strade, una principale e una secondaria. - La via viene concessa al secondario alla pressione di un bottone, - il secondario cambia automaticamente dopo una pausa. - Viene utilizzato un oggetto della libreria common per gestire i LED. - - Uno stimolo esterno rappresentato dalla pressione di un bottone - causa il passaggio di stato. - - */ - -#include -const byte input = 2; // PIN del bottone -int pausa = 3000; -enum states_available { // Stati della FMS - turn_green, // Dinamico, transizione - green, // Statico - wait_button, - turn_red, - red -}; - -states_available FSM1 ; -states_available FSM2 ; - - -void setup() { - pinMode(input, INPUT_PULLUP); - Serial.begin(9600); - Serial.flush(); -} - -RGBLed led_main(11, 10, 9); -RGBLed led_secondary(8, 7, 6); - -void loop() { -switch (FSM1) { - case turn_green : - led_main.Green(); - FSM1 = green ; // Setta il prossimo state - FSM2 = red ; // Setta il prossimo state - break; - - case green: - delay(pausa * 2/3); - FSM1 = wait_button ; - break; - - case wait_button: - if (digitalRead(input) == LOW) { - FSM1 = turn_red ; // Il passaggio di stato avviene alla pressione di un bottone - }; - delay(20); - break; - - case turn_red : - led_main.Yellow(); - delay(pausa/3); - led_main.Red(); - FSM1 = red ; - FSM2 = turn_green; // Stimolo al semafor secondario - break; - - case red : - //delay(pausa); - //main = turn_green ; - break; -} -switch (FSM2) { - case turn_green : - led_secondary.Green(); - FSM2 = green ; // Setta il prossimo state - break; - - case green: - delay(pausa * 2/3); - FSM2 = turn_red ; // Niente stimoli - break; - - case turn_red : - led_secondary.Yellow(); - delay(pausa/3); - FSM1 = turn_green ; - FSM2 = red ; - break; - - case red : - led_secondary.Red(); - break; -} - -Serial.print(millis()); -Serial.print(" \t Stato attuale Main: "); -Serial.print(FSM1); -Serial.print(", secondary: "); -Serial.println(FSM2); - -}