]> git.piffa.net Git - sketchbook_andrea/blob - advanced_projects/state_machine/blink/blink_2_trans/blink_2_trans.ino
1841f878d270307fc1b667f435183ec3eaaece2c
[sketchbook_andrea] / advanced_projects / state_machine / blink / blink_2_trans / blink_2_trans.ino
1 /*
2   Blink FSM
3
4   Accensione e spegnimanto di un LED utilizzando
5   una FSM  con 4 stati, statici e di transizione.
6
7 Costrutto switch basato su uno struct.
8
9  */
10
11 // Dichiarazione variabili
12 int led = 11; // PWM
13 int pausa = 1000;  // Variabile richiambile nel corso dell'esecuzione
14 byte lum = 0 ;
15
16 void setup() {
17     // Inizializziamo il PIN 13 come OUTPUT
18     pinMode(led, OUTPUT);
19 }
20
21 enum fsm_stati { // Stati della FMS
22     on,     // Statico
23     to_off, // Transizione
24     off,
25     to_on
26 };
27
28 fsm_stati stato ;
29
30 void loop() {
31     switch (stato) {
32     case on :
33         // Operativa: Machine
34         digitalWrite(led, HIGH);  // Mette il PIN del LED in stato acceso
35         delay(pausa);              
36
37         // Stati
38         stato = to_off ; // Setta il prossimo state
39         lum = 255;
40         break;
41
42     case to_off :
43         while (lum > 0) {
44             lum-- ;
45             analogWrite(led, lum);  // Mette il PIN del LED in stato acceso
46             delay(1);              
47         }
48
49         stato = off ; // Setta il prossimo state
50         break;
51
52     case off:
53         digitalWrite(led, LOW);   // Mette il PIN del LED in stato spento
54         delay(pausa);             
55
56         stato = to_on ;
57         lum = 0;
58         break;
59
60     case to_on :
61         while (lum < 255) {
62             lum++ ;
63             analogWrite(led, lum);  // Mette il PIN del LED in stato acceso
64             delay(1);              
65         }
66
67         stato = on ; // Setta il prossimo state
68         break;
69     }
70 }
71
72 /* Domande:
73
74  1.Cosa comporta l'uso della funzione delay?
75  2.Come si puo' modificare lo sketch per poter eseguire piu' conpiti contemporaneamente?
76
77 Esercizi successivi:
78 - Creare una FSM con un LED RGB avente due stati Red e Green, una transizione yellow tra i due
79 - Creare una FSM per la gestione di un semaforo 
80         (esempio disponibile in sketchbook_andrea/advanced_projects/state_machine )
81
82  .
83  .
84  .
85  .
86  .
87  .
88  .
89  .
90  .
91  .
92  .
93  .
94  .
95  .
96  .
97  .
98  .
99  .
100  .
101  .
102  Soluzioni:
103
104  1.Delay rende il codice blocking, null'altro puo' essere eseguito durante i delay
105  2.Si potrebbe utilizzare millis(), vedi esercizi multitasking
106 */