X-Git-Url: http://git.piffa.net/web?p=sketchbook_andrea;a=blobdiff_plain;f=advanced_projects%2Fstate_machine%2Fsemaforo_2_stimolo%2Fsemaforo_2_stimolo.ino;fp=advanced_projects%2Fstate_machine%2Fsemaforo_2_stimolo%2Fsemaforo_2_stimolo.ino;h=0000000000000000000000000000000000000000;hp=9b4b3678dd4729c685566041295c76972796a5dc;hb=8a90a5875d2fcf8db21835920d57f97a4bca0ade;hpb=92687f500a1e7aed1fe35540e4f4aee5f8bcf6a1 diff --git a/advanced_projects/state_machine/semaforo_2_stimolo/semaforo_2_stimolo.ino b/advanced_projects/state_machine/semaforo_2_stimolo/semaforo_2_stimolo.ino deleted file mode 100644 index 9b4b367..0000000 --- a/advanced_projects/state_machine/semaforo_2_stimolo/semaforo_2_stimolo.ino +++ /dev/null @@ -1,101 +0,0 @@ -/* - Semaforo RGB - - Un singolo semaforo costruito col paradigma delle macchine a stato. - Viene utilizzato un oggetto della libreria common per gestire il 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, // Evento - Stimolo - turn_red, // Dinamico, transizione - red // Statico -}; - -states_available state ; - - -void setup() { - pinMode(input, INPUT_PULLUP); - Serial.begin(9600); - Serial.flush(); -} - -RGBLed led(11, 10, 9); //Istanziamo un oggetto led facente parte - // della classe RGBLed - -void loop() { -switch (state) { - case turn_green : - led.Green(); - state = green ; // Setta il prossimo state - break; - - case green: - delay(pausa * 2/3); - state = wait_button ; - break; - - case wait_button: - if (digitalRead(input) == LOW) { - state = turn_red ; // Il passaggio di stato avviene alla pressione di un bottone - delay(20); - }; - - break; - - case turn_red : - led.Yellow(); - delay(pausa/3); - led.Red(); - delay(pausa); - state = red ; - break; - - case red : - delay(pausa); - state = turn_green ; - break; - - default: // In caso di default si fa giallo lampeggiante - led.Yellow(); - delay(pausa/3); - led.Off(); - delay(pausa/3); - break; - -} -Serial.print(millis()); -Serial.print(" \t Stato attuale "); -Serial.println(state); - -} - -/* Domande: - 1. Introdurre una memoria nello stato green che tenga traccia della pressione del bottone - per lo stato succiessivo. - 2. Introdurre un secondo semaforo che cambia stato quando viene attivato - lo stimolo. - 3. L'uso di delay() puo' essere limitativo: come rimediare? -. -. -. -. -. -. -. -. -. -. - Soluzioni -3. Si potrebbe utilizzare un interrupt per gli stimoli oppure millis() - per gestire le pause. - */