]> git.piffa.net Git - sketchbook_andrea/blobdiff - advanced_projects/state_machine/semaforo_3_millis/semaforo_3_millis.ino
Data type con funzione
[sketchbook_andrea] / advanced_projects / state_machine / semaforo_3_millis / semaforo_3_millis.ino
index fea0a67c367a64210eb68d645c831f0ac50b7ce5..0b3c41563d7a8650d2c3de11f57f4e9506ef47b2 100644 (file)
@@ -18,8 +18,8 @@
 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 +42,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();
@@ -56,7 +53,7 @@ case green:
 
 case wait_button:
     if (digitalRead(input) == LOW) {
-        state = turn_yellow ; // Il passaggio di stato avviene alla pressione di un bottone
+        state = turn_yellow ; 
         delay(20); // Debouncing, si potrebbe fare con millis()
         timer = millis();
     };
@@ -81,7 +78,7 @@ case turn_red :
 case red :
     led.Red();
     if (millis() - timer >= pausa) {
-        state = turn_green ;
+        state = green ;
         timer += pausa ;
     }
     break;
@@ -102,9 +99,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 +113,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
  */