4 Un incrocio costituito da due strade, una principale e una secondaria.
5 La via viene concessa al secondario alla pressione di un bottone,
6 il secondario cambia automaticamente dopo una pausa.
7 Viene utilizzato un oggetto della libreria common per gestire i LED.
9 Uno stimolo esterno rappresentato dalla pressione di un bottone
10 causa il passaggio di stato.
15 const byte input = 2; // PIN del bottone
17 enum states_available { // Stati della FMS
18 turn_green, // Dinamico, transizione
25 states_available FSM1 ;
26 states_available FSM2 ;
30 pinMode(input, INPUT_PULLUP);
35 RGBLed led_main(11, 10, 9);
36 RGBLed led_secondary(8, 7, 6);
42 FSM1 = green ; // Setta il prossimo state
43 FSM2 = red ; // Setta il prossimo state
52 if (digitalRead(input) == LOW) {
53 FSM1 = turn_red ; // Il passaggio di stato avviene alla pressione di un bottone
63 FSM2 = turn_green; // Stimolo al semafor secondario
73 led_secondary.Green();
74 FSM2 = green ; // Setta il prossimo state
79 FSM2 = turn_red ; // Niente stimoli
83 led_secondary.Yellow();
94 Serial.print(millis());
95 Serial.print(" \t Stato attuale Main: ");
97 Serial.print(", secondary: ");