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