X-Git-Url: http://git.piffa.net/web?a=blobdiff_plain;f=advanced_projects%2Fstate_machine%2Fsemaforo_3_millis%2Fsemaforo_3_millis.ino;h=4cc7dcbb650d4972f7d571413c937239f5821eca;hb=d6f25103f52e854fb73f62031cf844a3925e4990;hp=fea0a67c367a64210eb68d645c831f0ac50b7ce5;hpb=0c94aa8e6fc849a034ad670198a3f1248eb173af;p=sketchbook_andrea diff --git a/advanced_projects/state_machine/semaforo_3_millis/semaforo_3_millis.ino b/advanced_projects/state_machine/semaforo_3_millis/semaforo_3_millis.ino index fea0a67..4cc7dcb 100644 --- a/advanced_projects/state_machine/semaforo_3_millis/semaforo_3_millis.ino +++ b/advanced_projects/state_machine/semaforo_3_millis/semaforo_3_millis.ino @@ -19,7 +19,6 @@ const byte input = 2; // PIN del bottone int pausa = 3000; long timer ; enum states_available { // Stati della FMS - turn_green, // Dinamico, transizione green, // Statico wait_button, // Evento - Stimolo turn_yellow, // Dinamico, transizione @@ -42,9 +41,6 @@ RGBLed led(11, 10, 9); //Istanziamo un oggetto led facente parte void loop() { switch (state) { -case turn_green : - state = green ; // Setta il prossimo state - break; case green: led.Green(); @@ -81,7 +77,7 @@ case turn_red : case red : led.Red(); if (millis() - timer >= pausa) { - state = turn_green ; + state = green ; timer += pausa ; } break; @@ -102,9 +98,9 @@ Serial.println(state); } /* Domande: - 1. Introdurre un secondo semaforo che cambia stato quando viene attivato - lo stimolo. - 2. L'uso di delay() puo' essere limitativo: come rimediare? + 1. Fare in modo che nello stato verde venga recepito un'eventuale pressione + del bottone, venga comunque garantito un periodo minimo per il verde ma nel caso + sia stato premuto il bottone durante questo si passi poi direttamente al giallo. . . . @@ -116,6 +112,5 @@ Serial.println(state); . . Soluzioni -2. Si potrebbe utilizzare un interrupt per gli stimoli oppure millis() - per gestire le pause. +1. Vedi esercizio: semaforo_rgb */