]> git.piffa.net Git - sketchbook_andrea/blob - advanced_projects/state_machine/semaforo_1/semaforo_1.ino
State machines
[sketchbook_andrea] / advanced_projects / state_machine / semaforo_1 / semaforo_1.ino
1 /*
2    Semaforo RGB
3
4    Un singolo semaforo costruito col paradigma delle macchine a stato.
5    Viene utilizzato un oggetto della libreria common per gestire il LED.
6
7    */
8 #include <common.h>
9 int pausa = 3000;
10 enum states_available { // Stati della FMS
11     turn_green,    // Dinamico, transizione
12     green,         // Statico
13     turn_red,
14     red
15 };
16
17 states_available state  ;
18
19
20 void setup() {
21   Serial.begin(9600);
22   Serial.flush();
23 }
24
25 RGBLed led(11, 10, 9); //Istanziamo un oggetto led facente parte
26                        // della classe RGBLed
27
28 void loop() {
29 switch (state) {
30     case turn_green :
31     led.Green();
32     state = green ; // Setta il prossimo state
33     break;
34
35     case green:
36     delay(pausa * 2/3);
37     state = turn_red ;
38     break;
39
40     case turn_red :
41     led.Yellow();
42     delay(pausa/3);
43     led.Red();
44     delay(pausa);
45     state = red ;
46     break;
47
48     case red :
49     delay(pausa);
50     state = turn_green ;
51     break;
52
53     default:    // In caso di default si fa giallo
54     led.Yellow();
55     delay(pausa/3);
56     led.Off();
57     delay(pausa/3);
58     break;
59
60 }
61 Serial.print(millis()); 
62 Serial.print(" \t Stato attuale ");
63 Serial.println(state);
64
65 }
66
67 /* Domande:
68  1. Come legare il passaggio di stato ad un evento esterno,
69     ad es. la pressione di un bottone?
70  */