Incominciamo questa lezione fornendo la soluzione all’esercizio della lezione precedente.
Specifiche dell’esercizio
Durante la scorsa lezione abbiamo imparato a generare numeri casuali ed utilizzare l’istruzione IF THEN. Per realizzare il gioco: carta, sasso, forbice sarà sufficiente generare allo scuotimento della scheda un numero compreso tra 0 e 2 (quindi tre valori: 0, 1, 2) e in funzione del numero generato visualizzare una figura che rappresenta uno dei tre oggetti. Il programma da realizzare è molto simile a quello del dado realizzato nelle lezioni precedenti.
Proseguiamo con la lezione 7
Introduzione
Questo progetto utilizza i pulsanti di input collocati sulla scheda, quelli nominati con “A” e “B“, per la realizzazione di un timer che conta all’indietro da 9 a 0. Il pulsante “A” deve essere utilizzato per impostare a 9 secondi il timer, il pulsante “B” per avviare il timer.
Di cosa avete bisogno
- n.1 BBC micro:bit
- n.1 Micro USB
- n.1 Computer o tablet
- n.2 x Batterie AAA ed un contenitore per le batterie (opzionale perché la scheda potrà essere alimentata direttamente anche via USB)
Programmiamo
- Come per la lezione precedente, andate sul sito BBC micro:bit e fate click su “Let’s Code”.
- Scegliere la modalità di programmazione JavaScript Blocks Editor
- All’interno del “Microsoft Block Editor” click su “New project”.
- Cancellate le istruzioni che compaio di default: “on start” e “forever”. Per cancellare un’istruzione potete trascinarla verso sinistra sulla sezione comandi, comparirà un cestino, oppure selezionatela e cancellatela con il tasto DEL.
- Fate click su “Variables” e selezionate l’istruzione “set item to…”, trascinatela nell’area di programmazione, selezionate l’elemento “item” per aprire il menù a discesa, selezionate “rename variable” per cambiare il nome in “contatore”, confermate con un OK.
- All’interno del campo numerico inserite il numero 9 al posto dello 0.
- Selezionate all’interno del menù comandi il gruppo di istruzioni “Basics” e trascinate il blocco “show number” all’interno della finestra di programmazione.
- Nel menù “Variables” cercate la variabile “contatore” all’interno della finestra di programmazione.
- Trascinate la variabile “contatore” all’interno dell’istruzione “show number” al di sopra del valore “0”, incastratela al posto dello “0”.
- Inseriamo ora l’istruzione “show number” all’interno dell’istruzione “forever” che permette di ripetere in un loop infinito le istruzioni in esso incluse, trovate l’istruzione all’interno della sezione “Basics”.
- Come potete notare il valore visualizzato è “0” e non “9” come ci si potrebbe aspettare, ciò accade perché l’assegnazione del valore “9” alla variabile “contatore” deve avvenire all’interno di una istruzione “on start”.
L’istruzione “on start” potete trovarla nella sezione “Basic”. Effettuando tale modifica visualizzerete il numero “9” fisso sulla matrice di LED, in questo modo diciamo alla nostra scheda di visualizzare ripetutamente il numero 9 sulla matrice di LED.
Cosa accadrebbe se il numero fosse costituito da più cifre?
Provate ad assegnare a contatore il numero: 1967 vedrete ripetere in un loop infinito la sequenza dei numeri 1, 9, 6, 7
- Ora procediamo con l’assegnare al pulsante “A” un’azione. All’interno della sezione “Inputs” troviamo l’istruzione “on button A pressed“ che permette di eseguire le istruzioni in esso contenute se viene premuto il pulsante “A”.
- Inserite all’interno dell’istruzione “on button” l’assegnazione: “set contatore to 1”, ciò permetterà di sostituire il valore 1 al valore 9 una volta che premiamo il pulsante “A”.
- Per effettuare un conto alla rovescia quando premiamo il pulsante “B”, abbiamo necessità di creare un’altra variabile. All’interno della sezione “Variables” trascinare all’interno dell’area di programmazione un’altra istruzione “set item to…” e rinominate la variabile di default “item” in “ContatoreIndietro”.
- All’interno della sezione “Logic” trascinate il blocco “false” e collegatelo all’interno dell’impostazione variabile “set ContatoreIndietro to false” e inserite il blocco all’interno del blocco “on start”
- Duplichiamo l’istruzione “on button…” facendo click con tasto destro del mouse, impostiamo il pulsante a “B”, la variabile a “ContatoreIndietro”, lo stato della variabile a “true”.
- Per intercettare la richiesta di conto alla rovescia usiamo l’istruzione “If…then”. L’istruzione “If…then” la troviamo nella sezione “Logic”, inseriamo questa istruzione all’interno dell’istruzione “forever”.
- E’ necessario verificare quando viene effettuata la richiesta di conto alla rovescia, ciò accade quando la variabile “ContatoreIndietro” assume il valore “vero”. Reperiamo la variabile “ContatoreIndietro” dalla sezione “Variables” e lo stato logico “true” dalla sezione “Logic”, per avere una struttura come rappresentato nell’immagine che segue:
- Inseriamo una pausa di 1 secondo appunto perché dobbiamo realizzare un timer
- Ad ogni ciclo è indispensabile decrementare di 1 il contatore, per fare ciò usiamo l’istruzione “change” che consente di effettuare sulla stessa variabile un’operazione di incremento o decremento, nel nostro caso l’operazione da eseguire è la sottrazione di una unità: -1
- Ad ogni ciclo bisogna verificare se la variabile contatore assume il valore “0” o negativo ciò significa che non è più necessario effettuare il conto alla rovescia perché si è raggiunta la fine del conteggio “0”. Per bloccare il conto alla rovescia bisogna impostare la variabile “ContatoreIndietro” a false.
- A questo punto noterete che premendo il pulsante “B” il timer incomincia a contare all’indietro partendo da 9 fino a 0, premendo il pulsante “A” viene reimpostato il timer a 9 secondi.
Esercizio: cancellare il valore “-1”
Dovreste notare che al termine del conteggio, quando sul display compare “0” la pressione successiva del pulsante “B” visualizzerà sul display il valore “-1”, ciò capita perché l’ultimo valore assunto da “contatore” è proprio “-1”.
Come possiamo risolvere il problema?