#9 switch case break

In una lezione precedente, ho cercato di spiegare cosa sono le macchine a stati, li facevo un esempio di come poterla utilizzare in Arduino.
L’esempio più semplice che mi è venuto è stato quello di cambiare lo stato di un led da spento ad acceso a lampeggiante, per poi tornare a spento.

Il led avrà quindi 3 stati:
stato 0: Led spento.
stato 1: Led acceso.
stato 2: Led lampeggiante (il classico blink).

Materiale Necessario

Se siete interessati al materiale, cliccate su questo e sarete indirizzati alla pagina Amazon

Ovviamente si possono aggiungere altri stati, ma per comodità mi fermerò a 3.

Prima di passare alla compilazione dello sketch, creiamo il nostro circuito, collegando un led con la sua resistenza ad Arduino.

Analizziamo lo sketch:

Inseriamo quattro variabili:

  • int stato dove memorizzeremo lo stato del pulsante.
  • unsigned long tempo, in cui memorizzeremo il tempo trascorso.
  • unsigned long Dt che sarà la differenza tra il tempo attuale ed il tempo trascorso dall’ultimo cambio di stato del pulsante.
  • int statoLed che useremo per il blink, questa cambiare da LOW ad HIGH.

Sorvolo sul setup, in quanto è molto semplice, ho solo impostato il pin del led in uscita e quello del pulsante in entrata.

Passiamo al loop:

Partiamo con un if che gestisce il pulsante, questo if, funziona in maniera molto semplice, ad ogni pressione del pulsante incrementa di 1 il valore della variabile stato.

Adesso inizia la parte della cosiddetta macchina a stati:

la macchina inizia con uno switch collegato alla variabile stato, in pratica switch legge il valore della variabile ed in base al valore letto salta al case corrispondente.
Se il valore è 0 leggerà i comandi all’interno del case 0, nel nostro caso spegnerà il led e controllerà se si preme il pulsante, se questo viene premuto incrementa di 1 il valore della variabile stato.
Il comando break, dice solamente ad Arduino di non leggere i case successivi.

case 1, ossia cosa fare in caso il valore della variabile stato sia 1, in questo caso, Arduino accende il led e controlla sempre se viene premuto il pulsante, se questo viene premuto incrementa la variabile stato di 1

Ultimo case della nostra macchina a stati, Arduino esegue un blink del led.
Quando la variabile stato ha valore 2, Arduino controlla che la differenza di tempo tra il valore di millis attuale e quello trascorso dall’ultimo cambio di stato del led, sia maggiore di 500ms, se questo è vero cambia lo stato del led, quindi se era acceso lo spegne e viceversa.
Intanto controlla se premiamo il pulsante, se questo avviene lo stato passera dal valore 2 al valore 0 e si spegnerà il led essendo tornati al case 0.

/ 5
Grazie per aver votato!

Allegati