In questo progetto useremo due porte digitali, un (in OUTPUT - segnale elettrico in uscita) per accendere/spegnere il Led, come già fatto nei progetti precedenti, mentre la seconda porta digitale la imposteremo in INPUT, ovvero dovrà ricevere in entrata un segnale elettrico, proveniente dal pulsante. Arduino interpreterà questo segnale come '1' se arriva corrente è '0' se non arriva.
Occorrente:
Arduino Uno
Breadboard
Led
Resistenza da 220 Ohm
Resistenza da 10 KOhm
Pulsante normalmente aperto
Cavi Jumper
Costruisci il seguente circuito:
Si può notare che il Pin 5 è collegato tra il pulsante ed il '-' della breadboard. Ciò è necessario per portare a 0 il valore del Pin digitale, che altrimenti sarebbe fluttuante. Quando invece il pulsante viene premuto, la corrente può scorrere tra il + ed in maggior misura verso il Pin 5, che riceve il segnale elettrico riconoscibile da Arduino che gli attribusce il valore '1'. Un piccola parte della corrente fluisce verso il - della breadboard a causa delle notevole resistenza. Quindi se leggendo il valore del Pin 5, questo risulta '1', vuol dire che il tasto è premuto e quindi possiamo accendere il Led attraverso il Pin 4. Se invece la lettura del Pin 5 è '0', allora il tasto non è premuto e quindi il Led deve essere spento.
Al contempo viene inviato al Panda un messaggio che visualizza lo stato del led.
Si può leggere con attenzione il seguente sketch e replicarlo in mBlock.
Avviato lo sketch cliccando sulla bandierina verde, se tutto è stato fatto correttamente, premendo il pulsante 'sulla breadboard si accende il led e compare sul panda la nuvoletta "led acceso", rilasciando il pulsante, il led si spegne e compare la scritta "led spento".
Adesso per esercitarsi si modifichi lo sketch impostando l'accensione del Led con il pulsante non premuto e lo spegnimento con il tasto premuto.
A questo punto si può introdurre un'ulteriore modifica facendo in modo che premuto il pulsante il Led si accenda, e ripremuto il pulsante il Led si spegna.
Per questo progetto occorre una variabile di comodo 'stato' che conservi lo stato '0' o '1' del led. Però ogni volta che viene premuto il pulsante deve accadere che '1' venga portato a '0' ed invece '0' venga portato ad '1'. E' possibile ottenere questo risultato con i blocchi 'Se .... allora ... altrimenti'.
Interrogando la porta digitale in Input, la 5, verifichiamo se la variabile 'stato' è '1'; se lo è vuol dire che il Led è già acceso e quindi modifichiamo la variabile stato da '1' a '0', altrimenti ('else') vuol dire che la variabile 'stato' è '0' e quindi il Led è spento quindi modifichiamo la variabile 'stato da '0' ad '1'. Fatto questo possiamo dire ad Arduino di portate il pin '4' a 'stato', che in base a quanto fatto è '0' è '1' detemrinando l'o spegnimento del Led, se era già acceso, o la sua accensione se era spento.
Per evitare che tenendo il tasto premuto per qualche istante in più, questo continui a modificare il valore di 'stato', inseriamo un'attesa di mezzo secondo.
Questo lo sketch da comprendere e replicare in mBlock:
Avviato lo sketch premendo il pulsante una volta, e rilasciandolo, il Led si accende, se ripremiamo il pulsante una seconda volta, il Led si spegne.