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
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
69 default: // In caso di default si fa giallo lampeggiante
77 Serial.print(millis());
78 Serial.print(" \t Stato attuale ");
79 Serial.println(state);
84 1. Introdurre una memoria nello stato green che tenga traccia della pressione del bottone per lo stato successivo.
85 2. Introdurre un secondo semaforo che cambia stato quando viene attivato
87 3. L'uso di delay() puo' essere limitativo: come rimediare?
99 1. Vedi sketch: semaforo_rgb
100 3. Si potrebbe utilizzare un interrupt per gli stimoli oppure millis()
101 per gestire le pause.