Coding e tempo: come creare un orologio

Oggi parliamo di coding e tempo e di come possiamo programmare e disegnare un orologio utilizzando due diversi software per il coding: Codeblocks e Scratch.


Orologio con Codeblocks

Codeblocks è un ambiente di programmazione che si trova all’interno di Tinkercad e con il quale si può fare coding con i blocchetti per modellare un oggetto da stampare in 3D.

Entrando nel programma, vediamo subito che ci sono 10 esempi cui fare riferimento, tra i quali proprio quello di un orologio (uno dei più complessi). Selezioniamolo.

Sulla sinistra troviamo i blocchetti delle forme, al centro il codice e a destra il modello dell’oggetto.



Premendo play vediamo, a destra, l’animazione di costruzione dell’orologio mentre, al centro, vengono evidenziate, via via, le corrispondenti righe di codice. Alla fine possiamo osservare anche l’animazione delle lancette dei secondi che si muovono.

Inoltre, premendo il tasto Passaggio (che appare accanto al tasto pausa in alto a destra), possiamo vedere la scansione del codice riga per riga osservando cosa succede all’oggetto.

Codeblocks permette, quindi, di fare animazioni, ma, non avendo un timer interno, non ha un vero riferimento temporale.

Prendendo in considerazione il movimento della lancetta dei secondi, vediamo che esso è determinato dallo spostamento della stessa lungo l’asse Z (quello blu, perpendicolare al piano), che avviene per 60 volte e con un’ampiezza di 6°. Tale movimento non ha niente a che vedere con il tempo e non è possibile sapere se è sincronizzato con l’orologio che abbiamo al polso o con quello del server a cui è collegato il nostro computer.



Concludendo, Codeblocks è un programma che unisce il coding alla modellazione 3D e può essere usato, sia per la sola programmazione, che per integrare programmazione e modellazione 3D.


Orologio con Scratch

All’interno di Scratch possiamo ricercare la parola clock e selezionare uno degli esempi proposti.

Per questa lezione ne abbiamo scelto uno abbastanza semplice e lo abbiamo ulteriormente semplificato; il risultato è quello che potete osservare nell’immagine sottostante.



Per disegnare il quadrante, basta inserire nello sfondo l'immagine di un quadrante già creato con un programma esterno o disegnato dentro Scratch.


Analizziamo, adesso, gli sprite corrispondenti alle tre lancette che si muovono riproducendo l’ora effettiva.


Lancetta dei secondi (sprite 3)

Essa è semplicemente una linea con il perno.

Il movimento avviene grazie al blocco punta in direzione (dal menù movimento), che fa ruotare la linea. La rotazione è dell’ampiezza secondo attuale * 6:



  • Secondo attuale: dal menù sensori, possiamo selezionare secondo attuale, poiché Scratch ha un suo orologio interno, che possiamo prendere a riferimento e dal quale possiamo estrarre il dato che ci serve (è una variabile che può essere: anno, minuto, secondo, ecc..).

  • * 6: La lancetta ruota moltiplicando il secondo attuale (1, 2, 3, 4,....) per 6, perché il movimento avviene per multipli di 6° coprendo i sessantesimi di un angolo di 360° (6°, 12°, 18°, 24°, ….).


Lancetta dei minuti (sprite 2)

Anche questa funziona come la precedente, con il blocco punta in direzione, che è sincronizzato all’orologio interno (in particolare ai minuti). Ritroviamo, poi, il blocco ruota minuto attuale * 6. Anche qui la lancetta si muove per sessantesimi di un angolo di 360°.




Lancetta delle ore (sprite 3)

La lancetta delle ore, per come è stata programmata, scorre a blocchi, quindi scatta solo quando i minuti passano da 59 a 0. Anch’essa si muove mediante il blocco punta in direzione, sincronizzato all’orologio interno (sulle ore). Anche qui, ritroviamo il blocco ruota ora attuale * 30. Qui il riferimento sono 30°, che sono il dodicesimo di 360°.



All'interno di Scratch non c'è solamente l’orologio/calendario assoluto, cui abbiamo fatto riferimento per la programmazione delle tre lancette, ma anche il cronometro, che si attiva quando inizia il programma.


Orologio in Scratch usando il cronometro

Complicando un po’ il lavoro, vediamo come creare un orologio usando il cronometro interno a Scratch.

Per questo esempio, utilizziamo il codice di un’applicazione (switch trainer) creata precedentemente. Avviando la app, il cronometro (subito sotto la bandierina verde) si attiva. Quando il dito indica la stella verde, bisogna cliccare sulla freccia destra del computer e viene attribuito un punto (variabile giusti).



Analizziamo ora il codice.



Cronometro è una variabile di sistema, che può essere inserita nell’interfaccia grafica in modo da poterla sempre monitorare, quando giochiamo (dal menù sensori, inserire la spunta; possiamo anche cambiarne le dimensioni, cliccandoci sopra con il tasto destro del mouse e selezionando normale/grande).

Poiché è una variabile di sistema collegata all’orologio interno, non è possibile modificarne il valore mediante un cursore,

La variabile intervallo indica il tempo di alternanza tra l’indicazione della stella rossa e l’indicazione della stella verde. Se il semaforo assume casualmente il valore 1, il programma inizia con l’indicazione della stella verde, altrimenti con l'indicazione di quella rossa. Questa parte del programma non è inserita in nessun ciclo, ma viene eseguita una sola volta all’inizio.

Poi abbiamo il ciclo per sempre, che contiene la parte di programma che viene ripetuta all’infinito e che prevede l'alternanza tra le indicazioni stella verde/stella rossa in base al valore del semaforo, l'azzeramento del cronometro e l'assegnazione dei punti.

Il cronometro è un tempo relativo che si avvia quando avviamo il programma o facciamo reset.


Antirimbalzo

Con questo codice, se premiamo più volte la freccia destra quando il dito indica la stella verde, verrà attribuito un punteggio via via crescente (1 punto per ogni click). Sarebbe meglio escludere i click successivi al primo.

Possiamo, allora, utilizzare il blocco attendi.


L'attesa è pari all’intervallo meno il valore attuale - nel momento in cui premiamo il tasto - del cronometro, cioè attendi il tempo che rimane prima che la mano si sposti sull’altra stella.

Il blocco attendi mette in sospeso il programma, che non elabora altri stimoli.

Se usiamo il blocco attendi con un valore assoluto, avremo:



Questa volta, i punti non vengono registrati simultaneamente, perché la parte del programma che gestisce l’attribuzione dei punti è stata sospesa per 10 secondi.


Per approfondire questo argomento, guarda la video lezione Coding e tempo: programmiamo e disegniamo un orologio (Corso Coding per la primaria).

Vuoi certificare la tua formazione? Abbonati a PaLEoS!

© 2020 PaLEoS Srl
Via Sant'Angelo 25 - 50142 Firenze (FI)
Tel. 329-5983082 - info@paleos.it paleos.srl@pec.it
P.iva 06843880482 - Capitale Sociale € 39.000
Nr. iscrizione Registro Imprese Firenze: 660459

 | Privacy | Dove siamo