
Pubblico la seconda lezione per il gruppo di lavoro della mia classe terza Automazione che sta operando con lo shield LCD1602 Keypad Shield della Keyestudio, suggerendo alcuni sketch che potranno poi essere riutilizzati e modificati opportunamente per realizzare alcune dinamiche di gioco.
Per chi volesse cimentarsi in queste sperimentazioni ricordo che non è essenziale possedere LCD1602 Keypad Shield della Keyestudio, il tutto può essere ottenuto anche mediante un normale display, a questo dovrete aggiungere i 6 pulsanti che potranno essere connessi o al pin A0, secondo la rete resistiva che potete riprodurre guardando gli schemi elettrici della shield oppure gestendo il tutto collegando i pulsanti a dei pin digitali.
Esempio 01
Il primo degli sketch, molto semplice, permette di far rimbalzare avanti e indietro un carattere. Per questo esempio sono state utilizzate le funzioni: scrollDisplayRight() e scrollDisplayLeft() ciascuna inclusa in un ciclo for, il primo muove il carattere “*” verso destra di 16 posizioni, tante quante sono le colonne del display ed il secondo muoverà il carattere da sinistra verso destra.
10 | #include <LiquidCrystal.h> |
13 | LiquidCrystal lcd(8, 9, 4, 5, 6, 7); |
32 | for ( int contatorePosizioneColonna = 0; contatorePosizioneColonna < 16; contatorePosizioneColonna++) { |
34 | lcd.scrollDisplayRight(); |
40 | for ( int contatorePosizioneColonna = 0; contatorePosizioneColonna < 16; contatorePosizioneColonna++) { |
42 | lcd.scrollDisplayLeft(); |
Esercizio 1
Realizzare le medesime funzionalità dell’esempio 1, quando il carattere giunge nell’ultima colonna a destra, scende nella riga sottostante e ripercorre il tragitto verso sinistra, giunto alla prima colonna a sinistra risale sulla prima riga e si sposta nuovamente verso destra. Far ripetere in loop questa sequenza.
Esempio 02
Nell’esempio che segue vengono utilizzati i pulsanti RIGHT e LEFT del display per spostare verso destra o verso sinistra di un passo il carattere “*”.
L’identificazione del pulsante premuto avviene controllando il valore numerico restituito dall’analogRead() così come spiegato nella lezione 1.
Le due istruzioni if hanno come condizione il controllo del valore analogico, che indicherà il pulsante premuto il tutto è posto in AND con la posizione attuale (la colonna) del carattere, colonna memorizzata nella variabile “contatorePosizioneColonna” che nello spostamento verso destra dovrà essere incrementata e nello spostamento verso sinistra dovrà essere decrementata.
11 | #include <LiquidCrystal.h> |
14 | LiquidCrystal lcd(8, 9, 4, 5, 6, 7); |
17 | int contatorePosizioneColonna = 0; |
34 | int val = analogRead(A0); |
39 | if ((val >= 0 && val <= 50) && contatorePosizioneColonna < 15) { |
40 | lcd.scrollDisplayRight(); |
42 | contatorePosizioneColonna++; |
48 | if ((val >= 300 && val <= 500) && contatorePosizioneColonna > 0) { |
49 | lcd.scrollDisplayLeft(); |
51 | contatorePosizioneColonna--; |
Esercizio 2
Realizzare le stesse funzionalità dell’esempio 2 ed aggiungere la possibilità di selezionare il carattere da movimentare, mediante un menù iniziale in cui potrà essere fatta la selezione secondo lo schema di seguito indicato:
Pulsante SELECT: @
Pulsante DOWN : X
Pulsante UP : #
La selezione del carattere avviene una sola volta all’avvio del programma.
Esercizio 3
Eseguire le stesse funzionalità dell’esercizio 3 con la possibilità di visualizzare il menù di scelta carattere in qualsiasi momento, così da permettere la selezione del carattere da movimentare. Scegliere liberamente il pulsante da premere per visualizzare il menù.
Esempio 3
Nell’esempio che segue si mostra come movimentare da destra a sinistra due caratteri: da destra a sinistra “>” e da sinistra verso destra “<“. In questo esempio viene utilizzata il metodo setCursor() che permette di posizionare ad una colonna e riga specifica il cursore.
13 | #include <LiquidCrystal.h> |
19 | LiquidCrystal lcd(8, 9, 4, 5, 6, 7); |
32 | for ( int contatorePosizioneColonna = 0; contatorePosizioneColonna < 16; contatorePosizioneColonna++) { |
36 | lcd.setCursor(contatorePosizioneColonna, 0); |
44 | for ( int contatorePosizioneColonna = 16; contatorePosizioneColonna > 0; contatorePosizioneColonna--) { |
48 | lcd.setCursor(contatorePosizioneColonna, 0); |
Esercizio 4
All’interno del ciclo for, prima di posizionare e stampare il carattere, viene cancellato il display con il metodo clear(), sapresti indicare il motivo di questa scelta? Ci sono altri modi per ottenere il medesimo comportamento (movimento)?
Buon Coding a tutti.