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 un secondo semaforo che cambia stato quando viene attivato
85 2. L'uso di delay() puo' essere limitativo: come rimediare?
97 2. Si potrebbe utilizzare un interrupt per gli stimoli oppure millis()