Un'applicazione di Scratch piuttosto versatile consiste nel disegnare un semaforo e programmarne il funzionamento.semaforo B dett

Si devono manipolare sprites e costumi, si usa il condizionale "sealtrimenti" che è una istruzione di controllo, si inviano messaggi, si può espandere fino a disegnare strade di sfondo e controllare il passaggio di veicoli in accordo con lo stato del semaforo.

Si può anche estendere lo stesso programma all'uso di Picoboard per il funzionamento giorno/notte in base alla luce incidente.

Stesso lavoro si può fare con Arduino tramite S4A per accendere due file di LED appositamente collegati per fare da semaforo, compreso un sensore crepuscolare a fotoresistenza ed un interruttore per il passaggio da automatico a manuale per simulare la circostanza in cui un vigile provvede all'avanzamento delle fasi tramite un pulsante quando occorre una presenza in loco per regolare il traffico.

 

Ho scelto il funzionamento di un semaforo (video) che prevede la sequenza: verde, verde+giallo, rosso di giorno e giallo lampeggiane di notte (in realtà nel filmato, i due rossi permangono insieme per un po' di tempo).

Il semaforo deve essere disegnato per funzionare sulle due vie di un incrocio che denomino A e B.

Si possono individuare due modalità di realizzazione con Scratch per simulare il funzionamento del semaforo con le sue luci accese nelle varie fasi.

In ciascuno dei due casi, si prevedono quattro fasi per il funzionamento diurno che devono susseguirsi con una certa scansione temporale:

1- VerdeA & RossoB accesi gli altri spenti,

2- VerdeA+GialloA & RossoB accesi gli altri spenti,

3- RossoA & VerdeB accesi gli altri spenti,

4- RossoA &VerdeB + GialloB accesi gli altri spenti,

 

Per il funzionamento notturno si prevedono due fasi:

5- GialloA & GialloB accesi gli altri spenti,

6- tutto spento

In tutto sono neessarie sei configurazioni del semaforo a cui corrispondono sei fasi da fare avvicendare per realizzare il funzionamento automatico del semaforo.

Si esaminano quindi due casi.

 

caso a) consiste nel disegnare sulla stessa base (il supporto metallico verde con le luci spente colorate in grigio) le diverse configurazioni di colori possibili delle varie luci. Lo sprite è uno solo e ci sono sei costumi quante sono le configurazioni possibili (sei per giorno e notte).  

>>> vai al caso a)

caso b) consiste nel disporre sei sprite  corrispondenti alle tre lampade per la via A ed alle tre lampade per la via B, ciascuno sprite ha due costumi per rappresentare la luce accesa (nel colore previsto) o spenta (grigio).

>>> vai al caso b)

 

Ecco le due soluzioni:

caso a)

un solo sprite (video) con il semaforo disegnato in sei costumi diversi corrispondenti alle sei fasi sopra descritte,

Disegno degli sprites:

Per non produrre "saltellamenti" nel passaggio da un costume all'altro è necessario che i costumi siano esattamente sovrapponibili: 

1- si disegna uno di essi, es il costume GGx in cui tutte le luci sono grigie cioè spente

2- si copia e si modifica colorando la luce con lo strumento "secchiello"

3- si assegna il nome adatto a riconoscere il costume

4- si ripete 2- e 3- fino ad avere i sei costumi previsti.

 

Nella figura sottostante si vede uno sfondo che serve a rappresentare la situazione di giorno o di notte con dei veicoli "per fare scena" che si muovono senza relazione con lo stato del semaforo.

Il programma principale si basa sul controllo "per sempre" che è un loop, cioè un ciclo, che come tale che si ripete in continuazione.

Ad ogni ripetizione del ciclo viene attivato un controllo "se … altrimenti"che verifica lo stato del tasto "spazio" per decidere se attivare il funzionamento diurno oppure quello notturno.

L'attivazione di uno dei due modi di funzionamento avviene con l'invio di un "messaggio" col vantaggio di attivare più sprite o più processi contemporaneamente.

Infatti:

di giorno c'è luce, il semaforo usa i tre colori e circolano tutti i veicoli;

di notte è buio, circola solo il bus con le luci accese ed il semaforo ha il giallo intermittente.

 

Ecco un esempio da scaricare.

 

 

caso b)

sei sprites diversi (video) che sono le sei lampade ciascuna in due costumi acceso e spento e dei colori appropriati.

Ecco il quadro delle istruzioni di controllo e di invio messaggi a tutti gli sprites e, in dettaglio in basso a destra, un esempio (VerdeB) di raccolta e trattamento dei messaggi (lo sprite è "VerdeB" e si vede che ci  sono due costumi "VerdeB on" e "VerdeB off".

Tutto il processo viene gestito con invio di mesaggi di due tipi diversi:

- "invia a tutti ..." quando non è necessario, o non si vuole, attendere che lo script che è stato attivato dal messaggio abbia terminato di eseguire le istruzioni (esempio: per spegnere tutte le luci non è necessario attendere che lo abbiano fatto gli altri)

- "invia a tutti ... e attendi" quando si deve, o si vuole, attendere che lo script che è stato attivato dal messaggio debba terminare di eseguire tutte le istruzioni del blocco (esempio: prima che si accenda il verde della via A ed il rosso della via B devo essere sicuro che siano state spente tutte le luci del precedente stato.

Il "tasto spazio" viene utilizzato per imporre la modalità "giorno" inviando il messaggio "è giorno" se rilasciato e la modalità "notte" inviando il messaggio "è notte" se premuto.

Il comando "per sempre" crea un ciclo ripetuto indefinitamente o "loop"; ad ogni iterazione del ciclo, viene eseguito il test giorno/notte con il controllo "sealtrimenti" e con l'invio del relativo messaggio in base all'esito del test; inviato il messaggio il loop principale si mette in attesa; il gestore del messaggio esegue la sequenza una sola volta ed alla fine restituisce il controllo al ciclo principale (il loop) che ripete il test.

Ecco un esempio da scaricare.

Nota: da quando si preme il tasto per segnalare il passaggio dal giorno alla notte, può intercorrere del tempo prima che il semaforo si metta a lampeggiare con i due gialli. Questo funzionamento è dovuto al fatto che il puntatore dell'istruzione in esecuzione si può trovare ancora dentro le istruzioni del messaggio "è giorno" quando il tasto spazio viene premuto. L'istruzione che ha inviato il messaggio è del tipo "invia a tutti ... e attendi" per cui, fino a quando non si è conclusa la sequenza del giorno non viene effettuata la verifica "se tasto spazio premuto". La pressione del tasto deve essere mantenuta quindi a lungo (d'altro canto, quando fa notte non è che ci sia un solo impulso di buio, il segnale dura ore).