Lezione 4 – Arduino GamePad – Disegnare caratteri speciali su LCD1602 Keypad Shield della Keyestudio

In riferimento a quanto esposto a lezione questa mattina durante la lezione a distanza, aggiungo alcune indicazioni per disegnare icone personalizzate sul display: pacman, alieno, fantasmi, ecc… La modalità di realizzazione icone è la medesima di quella spiegata nella lezione svolta alcuni mesi fa: Disegnare caratteri personalizzati con Arduino per un LCD 16×2 in cui veniva utilizzato un display I2C.

Le modifiche per l’utilizzo dell’LCD1602 Keypad Shield della Keyestudio sono minime e di seguito indico alcuni esempi.

E’ importante, per inserire nuove icone sul display, studiare la lezione precedente in cui descrivo come realizzare le icone.

Di seguito tre esempi utili per sviluppare il vostro progetto di PCTO.

Esempio 1

In questo esempio mostro come visualizzare sulla prima riga del display una stringa di presentazione e sulla seconda riga 8 icone

1/*
2 *  Prof. Michele Maffucci
3 *  Crezione di caratteri personali
4 *  Utilizzo di un display LCD1602 Keypad Shield della Keyestudio
5 *  Data: 19.03.2021
6*/
7 
8// inclusione della libreria LiquidCrystal.h
9#include <LiquidCrystal.h>
10 
11// inizializza la libreria con i numeri dei pin dell'interfaccia
12LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
13 
14// caratteri personalizzati
15 
16byte lucchettoChiuso[8] = {
17  0b01110,
18  0b10001,
19  0b10001,
20  0b10001,
21  0b11111,
22  0b11011,
23  0b11011,
24  0b11111
25};
26 
27byte lucchettoAperto[8] = {
28  0b01110,
29  0b10000,
30  0b10000,
31  0b10000,
32  0b11111,
33  0b11011,
34  0b11011,
35  0b11111
36};
37 
38byte Altoparlante[8] = {
39  0b00001,
40  0b00011,
41  0b01111,
42  0b01111,
43  0b01111,
44  0b00011,
45  0b00001,
46  0b00000
47};
48 
49byte batteriaMezza[8] = {
50  0b01110,
51  0b11011,
52  0b10001,
53  0b10001,
54  0b10001,
55  0b11111,
56  0b11111,
57  0b11111
58};
59 
60byte alieno[8] = {
61  0b10001,
62  0b01010,
63  0b11111,
64  0b10101,
65  0b11111,
66  0b11111,
67  0b01010,
68  0b11011
69};
70 
71 
72byte pacmanBoccaChiusa[8] = {
73  0b01110,
74  0b11101,
75  0b11111,
76  0b11111,
77  0b11000,
78  0b11111,
79  0b11111,
80  0b01110
81};
82 
83byte pacmanBoccaAperta[8] = {
84  0b01110,
85  0b11101,
86  0b11111,
87  0b11100,
88  0b11000,
89  0b11000,
90  0b11111,
91  0b01110
92};
93 
94byte fantasmino[8] = {
95  0b01110,
96  0b11111,
97  0b10101,
98  0b11111,
99  0b11111,
100  0b11111,
101  0b11111,
102  0b10101
103};
104 
105void setup()
106{
107 // impostazione del numero di colonne e righe del display
108  lcd.begin(16, 2);
109 
110  // creazione nuovi caratteri
111  lcd.createChar(0, lucchettoChiuso);
112  lcd.createChar(1, lucchettoAperto);
113  lcd.createChar(2, Altoparlante);
114  lcd.createChar(3, batteriaMezza);
115  lcd.createChar(4, alieno);
116  lcd.createChar(5, pacmanBoccaChiusa);
117  lcd.createChar(6, pacmanBoccaAperta);
118  lcd.createChar(7, fantasmino);
119   
120  // Cancella il display
121  lcd.clear();
122 
123  // Stampa la stringa
124  lcd.print("PCTO a.s. 20/21");
125 
126}
127 
128void loop()
129{
130  lcd.setCursor(0, 1);
131  lcd.write(byte(0));
132 
133  lcd.setCursor(2, 1);
134  lcd.write(byte(1));
135 
136  lcd.setCursor(4, 1);
137  lcd.write(byte(2));
138 
139  lcd.setCursor(6, 1);
140  lcd.write(byte(3));
141 
142  lcd.setCursor(8, 1);
143  lcd.write(byte(4));
144 
145  lcd.setCursor(10, 1);
146  lcd.write(byte(5));
147 
148  lcd.setCursor(12, 1);
149  lcd.write(byte(6));
150 
151  lcd.setCursor(14, 1);
152  lcd.write(byte(7));
153}

Esempio 2

In questo secondo esempio mostriamo come visualizzare l’icona del Pacman che va avanti e indietro sulla prima riga del display

1/*
2 *  Prof. Michele Maffucci
3 *  Crezione di caratteri personali
4 *  Utilizzo di un display LCD1602 Keypad Shield della Keyestudio
5 *  Data: 19.03.2021
6 
7 *  Movimento verso destra e sinistra di una icona (alieno)
8*/
9 
10// inclusione della libreria LiquidCrystal.h
11#include <LiquidCrystal.h>
12 
13// inizializza la libreria con i numeri dei pin dell'interfaccia
14LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
15 
16// Velocità con cui viene stampato il l'icona 
17int velocita = 300;
18 
19// caratteri personalizzati
20 
21byte alieno[8] = {
22  0b10001,
23  0b01010,
24  0b11111,
25  0b10101,
26  0b11111,
27  0b11111,
28  0b01010,
29  0b11011
30};
31 
32void setup()
33{
34 // impostazione del numero di colonne e righe del display
35  lcd.begin(16, 2);
36 
37  // creazione nuovi caratteri
38  lcd.createChar(4, alieno);
39 
40  // visualizzazione sul display del nome
41  // dell'attività
42   
43  // Cancella il display
44  lcd.clear();
45 
46  // Stampa la stringa
47  lcd.print("PCTO a.s. 20/21");
48  delay(1000);
49 
50  // Cancella il display
51  lcd.clear();
52}
53 
54void loop()
55{
56   // Movimento verso destra del carattere
57  for (int contatorePosizioneColonna = 0; contatorePosizioneColonna < 16; contatorePosizioneColonna++) {
58    // Cancella il display
59    lcd.clear();
60    // Spostamento di una posizione verso destra del cursore
61    lcd.setCursor(contatorePosizioneColonna, 0);
62    // Stampa del icona: alieno
63    lcd.write(byte(4));
64    // Attesa di un'istante per percepire il movimento del carattere
65    delay(velocita);
66  }
67 
68  // Movimento verso sinistra del carattere
69  for (int contatorePosizioneColonna = 16; contatorePosizioneColonna > 0; contatorePosizioneColonna--) {
70    // Cancella il display
71    lcd.clear();
72    // Spostamento di una posizione verso sinistra del cursore
73    lcd.setCursor(contatorePosizioneColonna, 0);
74    // Stampa del icona: alieno
75    lcd.write(byte(4));
76    // Attesa di un'istante per percepire il movimento del carattere
77    delay(velocita);
78  }
79}

Esempio 3

Realizzare le medesime funzionalità dell’esercizio precedente in cui l’icona del Pacman nell’avanzamento apre e chiude la bocca.
In questo esempio il Pacman quando torna indietro non si gira.

1/*
2    Prof. Michele Maffucci
3    Crezione di caratteri personali
4    Utilizzo di un display LCD1602 Keypad Shield della Keyestudio
5    Data: 19.03.2021
6 
7    Movimento verso destra e sinistra di una icona (Pacman)
8    Durante il movimento il Pacman apre e chiude la bocca
9*/
10 
11// inclusione della libreria LiquidCrystal.h
12#include <LiquidCrystal.h>
13 
14// inizializza la libreria con i numeri dei pin dell'interfaccia
15LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
16 
17// Velocità con cui viene stampato il l'icona
18int velocita = 300;
19 
20// caratteri personalizzati
21 
22byte pacmanBoccaChiusa[8] = {
23  0b01110,
24  0b11101,
25  0b11111,
26  0b11111,
27  0b11000,
28  0b11111,
29  0b11111,
30  0b01110
31};
32 
33byte pacmanBoccaAperta[8] = {
34  0b01110,
35  0b11101,
36  0b11111,
37  0b11100,
38  0b11000,
39  0b11000,
40  0b11111,
41  0b01110
42};
43 
44void setup()
45{
46  // impostazione del numero di colonne e righe del display
47  lcd.begin(16, 2);
48 
49  // creazione nuovi caratteri
50  lcd.createChar(0, pacmanBoccaChiusa);
51  lcd.createChar(1, pacmanBoccaAperta);
52 
53  // Cancella il display
54  lcd.clear();
55 
56  // Stampa la stringa
57  lcd.print("PCTO a.s. 20/21");
58}
59 
60void loop()
61{
62 
63  // Movimento verso destra del carattere
64  for (int contatorePosizioneColonna = 0; contatorePosizioneColonna < 16; contatorePosizioneColonna++) {
65    // Cancella il display
66    lcd.clear();
67    // Spostamento di una posizione verso destra del cursore
68    lcd.setCursor(contatorePosizioneColonna, 0);
69    if (contatorePosizioneColonna % 2 == 0) {
70      // Stampa del icona: Pacman bocca chiusa
71      lcd.write(byte(0));
72    }
73    else
74    {
75      // Stampa del icona: Pacman bocca aperta
76      lcd.write(byte(1));
77    }
78    // Attesa di un'istante per percepire il movimento del carattere
79    delay(velocita);
80  }
81 
82  // Movimento verso sinistra del carattere
83  for (int contatorePosizioneColonna = 16; contatorePosizioneColonna > 0; contatorePosizioneColonna--) {
84    // Cancella il display
85    lcd.clear();
86    // Spostamento di una posizione verso sinistra del cursore
87    lcd.setCursor(contatorePosizioneColonna, 0);
88    if (contatorePosizioneColonna % 2 == 0) {
89      // Stampa del icona: Pacman bocca chiusa
90      lcd.write(byte(0));
91    }
92    else
93    {
94      // Stampa del icona: Pacman bocca aperta
95      lcd.write(byte(1));
96    }
97    // Attesa di un'istante per percepire il movimento del carattere
98    delay(velocita);
99  }
100}

Esercizio 1

Eseguire le stesse funzionalità dell’esempio 3 in cui però il Pacman rivolga il viso nella stessa direzione del movimento.

Esercizio 2

Movimentare il Pacman con i pulsanti RIGHT e LEFT, rivolgendo sempre il viso nella giusta posizione di movimento.

Buon Coding a tutti 🙂

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.