4 Version: singolo semaforo + millis + memoria giallo
6 Un singolo semaforo costruito col paradigma delle macchine a stato.
7 Viene utilizzato un oggetto della libreria common per gestire il LED.
9 Uno stimolo esterno rappresentato dalla pressione di un bottone
10 causa il passaggio di stato.
12 Implementata con millis() invece che con delay(),
13 sono stati aggiuntu due stati per meglio gestire lo stato yellow.
18 const byte input = 2; // PIN del bottone
21 enum states_available { // Stati della FMS
27 states_available state ;
32 pinMode(input, INPUT_PULLUP);
37 RGBLed led(11, 10, 9); //Istanziamo un oggetto led facente parte
38 // della classe RGBLed
45 if (wait && (millis() - timer >= pausa * 2/3)) {
50 if (digitalRead(input) == LOW) {
58 if (millis() - timer >= pausa /3) {
67 if (millis() - timer >= pausa) {
73 default: // In caso di default si fa giallo lampeggiante
83 Serial.print(millis());
84 Serial.print(" \t Stato attuale ");
86 Serial.print(" \t Wait: ");
92 1. Introdurre un secondo semaforo che cambia stato quando viene attivato
94 2. L'uso di delay() puo' essere limitativo: come rimediare?
106 2. Si potrebbe utilizzare un interrupt per gli stimoli oppure millis()
107 per gestire le pause.