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.
13 const byte input = 2; // PIN del bottone
15 enum states_available { // Stati della FMS
16 turn_green, // Dinamico, transizione
18 wait_button, // Evento - Stimolo
19 turn_red, // Dinamico, transizione
23 states_available state ;
27 pinMode(input, INPUT_PULLUP);
32 RGBLed led(11, 10, 9); //Istanziamo un oggetto led facente parte
33 // della classe RGBLed
39 state = green ; // Setta il prossimo state
48 if (digitalRead(input) == LOW) {
49 state = turn_red ; // Il passaggio di stato avviene alla pressione di un bottone
68 default: // In caso di default si fa giallo lampeggiante
76 Serial.print(millis());
77 Serial.print(" \t Stato attuale ");
78 Serial.println(state);
83 1. Introdurre una memoria nello stato green che tenga traccia della pressione del bottone
84 per lo stato succiessivo.
85 2. Introdurre un secondo semaforo che cambia stato quando viene attivato
87 3. L'uso di delay() puo' essere limitativo: come rimediare?
99 3. Si potrebbe utilizzare un interrupt per gli stimoli oppure millis()
100 per gestire le pause.