X-Git-Url: http://git.piffa.net/web?a=blobdiff_plain;f=advanced_projects%2Fstate_machine%2Fsemaforo_5_doppia_fsm%2Fsemaforo_5_doppia_fsm.ino;h=d7e914609b0d5853ff98ad0b9d2f42655cc9257c;hb=b46e75aacd9a0d7e318d5ef06730bf1e701ae9f5;hp=dfcc3626a77fe72103a2f8860ac0aec5c64381e4;hpb=be1dfd3e9cfafbf56bc78ad53c08eaa6cd8d502d;p=sketchbook_andrea diff --git a/advanced_projects/state_machine/semaforo_5_doppia_fsm/semaforo_5_doppia_fsm.ino b/advanced_projects/state_machine/semaforo_5_doppia_fsm/semaforo_5_doppia_fsm.ino index dfcc362..d7e9146 100644 --- a/advanced_projects/state_machine/semaforo_5_doppia_fsm/semaforo_5_doppia_fsm.ino +++ b/advanced_projects/state_machine/semaforo_5_doppia_fsm/semaforo_5_doppia_fsm.ino @@ -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 @@ -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 :