Esercizio - SEMAFORO

Ci eravamo lasciati, nella pagina precedente, con un esercizio da risolvere.

Progettare e realizzare un semaforo che seguisse esattamente la stessa sequenza dei semafori stradali. Vediamone insieme la soluzione.

SOLUZIONE 1

Iniziamo dal montaggio del semaforo.

Occorre collegare alla scheda i tre LED esattamente come abbiamo fatto per il LED singolo nell'esempio del capitolo precedente.

In particolare occorre aggiungere tre LED di colore diversi e quindi tre resistenze di valore diverso. Ripetendo i calcoli visti in precedenza avremo una resistenza da 180 Ohm per il LED rosso, una resistenza da 180 Ohm per quello giallo (ne servirebbe una da 155 Ohm e potremmo anche usarne una da 150), ed una da 150 Ohm per il LED verde (possiamo tranquillamente usare tre LED da 220 Ohm. Il calcolo è giusto farlo per amore del formalismo).

Costruiamo il circuito e vediamo come fare i collegamenti con la foto su della simulazione su TinkerCAD.

Vi invito a guardare lo schema ed in particolare il cavo nero di ritorno al GND. Abbiamo solo tre PIN GND, due da un lato ed uno dall’altro. Avremmo potuto collegarli direttamente ma ci saremmo preclusi, ad esempio, la possibilità di creare altri circuiti come ad esempio un secondo semaforo.

E allora basta sfruttare le caratteristiche elettriche della breadboard, ovvero portare tutti i negativi del LED sulla stessa riga orizzontale e successivamente collegare l’intera riga orizzontale ad un solo PIN GND (i cavi neri in figura).

È un sistema astuto per moltiplicare le possibilità di alimentazione.

Veniamo al codice che anticipiamo in figura.

Come fatto nell’esercizio del LED abbiamo definito all’inizio quali pin abbiamo usato.

La sequenza dei LED, non credo abbia bisogno di particolari commenti

Rilanciamo?

Possiamo far funzionare il semaforo solo per 10 volte? Anzi, Facciamolo funzionare per 10 volte ed accendiamo per qualche secondo tutti i LED prima di ripetere il loop.

SOLUZIONE 2

Ripetiamo dieci volte il semaforo e poi facciamo accendere tutti i LED. Non è un esercizio che ripete la realtà, ma ci serva ad introdurre una nuova potente funzione, un ciclo che consente ad Arduino di contare, il ciclo for.

In buona sostanza definiamo una variabile (la tentazione di dirvi di chiamarla PIPPO è forte), che chiameremo contatore e sulla quale faremo le nostre verifiche. Con il ciclo for (rimandiamo alle reference per approfondimenti), invece, ripeteremo una certa azione fino a che contatore non sia uguale proprio al limite che ci siamo importi (10 nel nostro caso.

Per chi ha confidenza con i blocchi di Scratch, è come se dicessimo ripeti fino a che contatore = 10.

Passiamo al codice.

Il codice è ben commentato, tuttavia ragioniamoci un po' insieme.

La cosa importante e nuova è la definizione di una variabile contatore che ci consente di contare appunto le ripetizioni del ciclo del semaforo. È una variabile intera visto che intero è il valore che di volta in volta assumerà. Quando sarà necessario utilizzeremo altri tipi di variabili che commenteremo al momento opportuno.

Da notare che la definizione viene fatta prima del setup() in modo da permettere al compilatore di riconoscere sempre ed in qualsiasi momento quello che abbiamo definito.

La sintassi prevede la dichiarazione del tipo di variabile (intera in questo caso) e la dichiarazione del nome della variabile, il tutto chiuso dall'immancabile punto e virgola.

Vediamo il ciclo di ripetizioni

Interessante vero? For rappresenta il tipo di ciclo e all’interno delle parentesi rispettivamente, troviamo l’inizializzazione del contatore (il valore iniziale), il valore finale della variabile che imporrà l’uscita dal ciclo e l’incremento, di quanto, cioè, aumenta la variabile ad ogni ripetizione (++ indica un incremento unitario).

Vi lascio due ulteriori esercizi che dovete risolvere.

ESERCIZIO 2

Torniamo ad un semaforo classico. Fermo restando la sequenza vista nella soluzione 1, vi chiedo ora di far lampeggiare il giallo tra il verde ed il rosso.

ESERCIZIO 3

Siete in grado di sincronizzare due semafori, uno per i pedoni ed uno per le automobili?