Il circuito che usiamo è lo stesso di prima, l’algoritmo è il seguente:

In questo algoritmo la pressione del pulsante non serve ad accendere direttamente il led ma a cambiare lo stato: da uno stato “acceso” ad uno “spento” o viceversa. In particolare, tramite l’istruzione  IF alla riga 14 ogni volta che il pulsante viene premuto si fa il cambio di stato:

  • se stato=0 dopo la pressione diventa stato=1 – 0 = 1;
  • se stato=1 dopo la pressione stato = 1 – 1 = 0.

Dopo aver impostato lo stato, il codice successivo controlla lo stato ed in base a quello viene acceso o spento il led.

Se provate il codice, noterete che alcune volte il meccanismo va in errore: se il LED è spento e premo il pulsante, il LED potrebbe restare spento oppure se è acceso non spegnersi.  Perché mai? Arduino legge le istruzioni del vostro codice alla velocità di milioni di istruzioni al secondo, per cui la lettura dello stato del pulsante viene effettuata moltissime volte e potrebbe darsi che il nostro dito o il pulsante siano “tremolanti” così che la chiusura/apertura del circuito potrebbe avvenire più volte, per cui Arduino legge diverse volte ON, e poi OFF e così via. Il progetto con LED sembra non funzionare correttamente.

Questo problema avviene perché il pulsante è un apparato meccanico costituito da contatti elettrici ed una molla, quando premiamo e rilasciamo, si manifestano situazioni di rimbalzo del contatto che creano dei segnali “sporchi” che modificano ripetutamente lo stato del diodo led.