4 Un singolo semaforo costruito col paradigma delle macchine a stato.
5 Viene utilizzato un oggetto della libreria common per gestire il LED.
7 Uno stimolo esterno rappresentato dalla pressione di un bottone
8 causa il passaggio di stato.
10 Implementata con millis() invece che con delay(),
11 sono stati aggiuntu due stati per meglio gestire lo stato yellow.
16 const byte input = 2; // PIN del bottone
19 enum states_available { // Stati della FMS
20 turn_green, // Transizione
22 wait_button, // Evento - Stimolo
23 turn_yellow, // transizione
25 turn_red, // transizione
29 states_available FSM1 ;
30 states_available FSM2 ;
34 pinMode(input, INPUT_PULLUP);
39 RGBLed led1(11, 10, 9); //Istanziamo un oggetto led facente parte
40 RGBLed led2(8,7,6); //Istanziamo un oggetto led facente parte
41 // della classe RGBLed
47 FSM1 = green ; // Setta il prossimo state
48 FSM2 = red ; // Setta il prossimo state
52 if (millis() - timer >= pausa * 2/3) {
59 if (digitalRead(input) == LOW) {
62 delay(20); // Debouncing, si potrebbe fare con millis()
73 if (millis() - timer >= pausa * 2/3) {
88 default: // In caso di default si fa giallo lampeggiante
99 FSM2 = green ; // Setta il prossimo state
103 if (millis() - timer >= pausa * 2/3) {
115 if (millis() - timer >= pausa / 3) {
127 led2.Red(); // Aggiorniamo il LED in questo stato invece che nel precedente
128 // per entrare nel primo ciclo di esecuzione con il LED rosso
131 default: // In caso di default si fa giallo lampeggiante
139 Serial.print(millis());
140 Serial.print(" \t Stato attuale FSM1: ");
142 Serial.print(" - FSM2: ");
143 Serial.println(FSM2);
147 1. E' piu' semplice ora inserire degli altri oggetti nello sketch?
148 2. Gli eventi sono condivisi? Le varie FSM hanno modo di scambiarsi
149 informazioni sui relativi stati?
150 3. Creare un dispatcher degli eventi al quale le varie FSM possono
163 1. Si, per quanto le 2 FSM non siano indipendenti l'una dall'altra.
164 2. No, c'e' un solo flusso degli eventi, il blocco di una delle FSM
165 puo' causare lo stop di tutto il sistema.