]> git.piffa.net Git - sketchbook_andrea/blobdiff - advanced_projects/state_machine/semaforo_5_doppia_fsm/semaforo_5_doppia_fsm.ino
Structured data types
[sketchbook_andrea] / advanced_projects / state_machine / semaforo_5_doppia_fsm / semaforo_5_doppia_fsm.ino
index dfcc3626a77fe72103a2f8860ac0aec5c64381e4..d7e914609b0d5853ff98ad0b9d2f42655cc9257c 100644 (file)
@@ -1,15 +1,21 @@
 /*
-   Semaforo RGB
+   Semaforo con doppia FSM
 
-   Un singolo semaforo costruito col paradigma delle macchine a stato.
-   Viene utilizzato un oggetto della libreria common per gestire il LED.
+Due FSM indipendenti per la gestione di ognuno dei 2 semafori
+che costituiscono un incrocio. Le due FSM possono modificare
+i rispettivi stati.
 
-   Uno stimolo esterno rappresentato dalla pressione di un bottone
-   causa il passaggio di stato.
+Un singolo semaforo costruito col paradigma delle macchine a stato.
+Viene utilizzato un oggetto della libreria common per gestire il LED.
 
-   Implementata con millis() invece che con delay(),
-   sono stati aggiuntu due stati per meglio gestire lo stato yellow.
+Uno stimolo esterno rappresentato dalla pressione di un bottone
+causa il passaggio di stato.
 
+Implementata con millis() invece che con delay(),
+sono stati aggiuntu due stati per meglio gestire lo stato yellow.
+
+- Schema per un led RGB: https://lab.piffa.net/schemi/rgb.jpg
+- Schema per un bottone: https://www.arduino.cc/en/uploads/Tutorial/inputPullupButton.png
    */
 
 #include <common.h>
@@ -70,9 +76,9 @@ switch (FSM1) {
     break;
 
     case yellow :
-    if (millis() - timer >= pausa * 2/3) {
+    if (millis() - timer >= pausa * 1/3) {
         FSM1 = turn_red ;
-        timer += pausa * 2/3 ;
+        timer += pausa * 1/3 ;
     }
     break;
 
@@ -107,20 +113,21 @@ switch (FSM2) {
     break;
 
     case turn_yellow :
-    led2.Yellow();
+    led2.Blue();
     FSM2 = yellow ;
     break;
 
     case yellow :
     if (millis() - timer >= pausa / 3) {
     FSM2 = turn_red ;
-    timer += pausa * 2/3;
+    //timer += pausa * 2/3;
     }
     break;
 
     case turn_red :
     FSM2 = red ;
     FSM1 = turn_green;
+    timer = millis();
     break;
 
     case red :