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, // Dinamico, transizione
26 states_available state ;
31 pinMode(input, INPUT_PULLUP);
36 RGBLed led(11, 10, 9); //Istanziamo un oggetto led facente parte
37 // della classe RGBLed
42 state = green ; // Setta il prossimo state
47 if (wait && millis() - timer >= pausa * 2/3) {
52 if (digitalRead(input) == LOW) {
60 if (millis() - timer >= pausa /3) {
69 if (millis() - timer >= pausa) {
75 default: // In caso di default si fa giallo lampeggiante
85 Serial.print(millis());
86 Serial.print(" \t Stato attuale ");
88 Serial.print(" \t Wait: ");
94 1. Introdurre un secondo semaforo che cambia stato quando viene attivato
96 2. L'uso di delay() puo' essere limitativo: come rimediare?
108 2. Si potrebbe utilizzare un interrupt per gli stimoli oppure millis()
109 per gestire le pause.