#9 Macchine a stati

Uno dei difetti di Arduino è di avere uno sketch diviso in due zone, setup e loop, in questo ultimo troviamo le lunghe sequenze di istruzioni.

In situazioni in cui abbiamo sketch complessi, verrebbe comodo suddividere in loop principale in tanti piccoli loop, ognuno dei quali ha il suo specifico compito, questo può avvenire attraverso le macchine a stati.

In breve per costruire una macchina a stati occorre:

1. Individuare gli stati significativi in cui la macchina si può trovare durante il funzionamento.
2. Come la macchina può passare tra uno stato e l’atro.
3. L’evento che porta al passaggio di stato.

Gli stati sono rappresentati da circonferenze e sono collegati tra loro dalle transizioni che vengono rappresentare con delle frecce, l’uscita dallo stato, rappresenta la risposta della macchina ad un evento.

Facciamo un esempio, supponiamo di voler disegnare il diagramma di stato di una lampadina, questo avrà due stati; acceso o spento, e passerà da uno stato all’altro premendo l’interruttore.

Applicando una macchina a stati in Arduino, l’esempio più semplice che mi viene in mente, è la gestione di un led, possiamo creare una macchina a tre stati:
0. il led è spento.
1. il led è acceso.
2. il led lampeggia.

ovviamente potremmo inserire altri stati, come il led con una potenza del 50%, un altro con potenza del 70% ecc.

Il Diagramma di stato per la gestione del led come detto sopra sarà il seguente,
Avremo lo stato 0, in cui il led è spento, alla pressione del pulsante, avremo lo stato 1, in cui il led sarà acceso, premendo nuovamente il pulsante passeremo al led lampeggiante, successivamente torneremo allo stato 0.

Questo permetterà di creare dei piccoli loop, che Arduino leggerà solo se la condizione è vera, viceversa li ignorerà, avremo così uno sketch molto più fluido e con pochi if concatenati fra di loro, che rendono lo sketch molto complicato da scrivere.

Un esempio di una macchina a stati per led la trovare inquietante questo link:

/ 5
Grazie per aver votato!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *