Accensione e spegnimanto di un LED utilizzando
una FSM con 4 stati, statici e di transizione.
-Costrutto switch basato su uno struct.
+Costrutto switch basato su un enum:
*/
// Dichiarazione variabili
int led = 11; // PWM
int pausa = 1000; // Variabile richiambile nel corso dell'esecuzione
-byte lum = 0 ;
+byte lum = 255 ;
void setup() {
// Inizializziamo il PIN 13 come OUTPUT
pinMode(led, OUTPUT);
}
-enum fsm_stati { // Stati della FMS
+enum fsm_stati: byte { // Stati della FMS, explicit type cast
on, // Statico
to_off, // Transizione
off,
to_on
-};
+} stato ; // denominazione di una variabile
-fsm_stati stato ;
void loop() {
switch (stato) {
// Stati
stato = to_off ; // Setta il prossimo state
- lum = 255;
+ // lum = 255;
break;
case to_off :
delay(pausa);
stato = to_on ;
- lum = 0;
+ // lum = 0;
break;
case to_on :
stato = on ; // Setta il prossimo state
break;
+
+ default: // Opzionale, quando non si verificano altre condizioni
+ break;
}
}
1.Delay rende il codice blocking, null'altro puo' essere eseguito durante i delay
2.Si potrebbe utilizzare millis(), vedi esercizi multitasking
+ oppure: https://www.sparkfun.com/news/1801
*/