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 - Schema per un led RGB: https://lab.piffa.net/schemi/rgb.jpg
11 - Schema per un bottone: https://www.arduino.cc/en/uploads/Tutorial/inputPullupButton.png
15 const byte input = 2; // PIN del bottone
16 const int pausa = 3000;
17 enum states_available { // Stati della FMS
18 turn_green, // Dinamico, transizione
20 wait_button, // Evento - Stimolo
21 turn_red, // Dinamico, transizione
25 states_available state ;
29 pinMode(input, INPUT_PULLUP);
34 RGBLed led(11, 10, 9); //Istanziamo un oggetto led facente parte
35 // della classe RGBLed
41 state = green ; // Setta il prossimo state
50 if (digitalRead(input) == LOW) {
51 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 per lo stato successivo.
84 2. Introdurre un secondo semaforo che cambia stato quando viene attivato
86 3. L'uso di delay() puo' essere limitativo: come rimediare?
98 1. Vedi sketch: semaforo_rgb
99 3. Si potrebbe utilizzare un interrupt per gli stimoli oppure millis()
100 per gestire le pause.