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
/* * Prof. Michele Maffucci * Crezione di caratteri personali * Utilizzo di un display LCD1602 Keypad Shield della Keyestudio * Data: 19.03.2021 */ // inclusione della libreria LiquidCrystal.h #include <LiquidCrystal.h> // inizializza la libreria con i numeri dei pin dell'interfaccia LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // caratteri personalizzati byte lucchettoChiuso[8] = { 0b01110, 0b10001, 0b10001, 0b10001, 0b11111, 0b11011, 0b11011, 0b11111 }; byte lucchettoAperto[8] = { 0b01110, 0b10000, 0b10000, 0b10000, 0b11111, 0b11011, 0b11011, 0b11111 }; byte Altoparlante[8] = { 0b00001, 0b00011, 0b01111, 0b01111, 0b01111, 0b00011, 0b00001, 0b00000 }; byte batteriaMezza[8] = { 0b01110, 0b11011, 0b10001, 0b10001, 0b10001, 0b11111, 0b11111, 0b11111 }; byte alieno[8] = { 0b10001, 0b01010, 0b11111, 0b10101, 0b11111, 0b11111, 0b01010, 0b11011 }; byte pacmanBoccaChiusa[8] = { 0b01110, 0b11101, 0b11111, 0b11111, 0b11000, 0b11111, 0b11111, 0b01110 }; byte pacmanBoccaAperta[8] = { 0b01110, 0b11101, 0b11111, 0b11100, 0b11000, 0b11000, 0b11111, 0b01110 }; byte fantasmino[8] = { 0b01110, 0b11111, 0b10101, 0b11111, 0b11111, 0b11111, 0b11111, 0b10101 }; void setup() { // impostazione del numero di colonne e righe del display lcd.begin(16, 2); // creazione nuovi caratteri lcd.createChar(0, lucchettoChiuso); lcd.createChar(1, lucchettoAperto); lcd.createChar(2, Altoparlante); lcd.createChar(3, batteriaMezza); lcd.createChar(4, alieno); lcd.createChar(5, pacmanBoccaChiusa); lcd.createChar(6, pacmanBoccaAperta); lcd.createChar(7, fantasmino); // Cancella il display lcd.clear(); // Stampa la stringa lcd.print("PCTO a.s. 20/21"); } void loop() { lcd.setCursor(0, 1); lcd.write(byte(0)); lcd.setCursor(2, 1); lcd.write(byte(1)); lcd.setCursor(4, 1); lcd.write(byte(2)); lcd.setCursor(6, 1); lcd.write(byte(3)); lcd.setCursor(8, 1); lcd.write(byte(4)); lcd.setCursor(10, 1); lcd.write(byte(5)); lcd.setCursor(12, 1); lcd.write(byte(6)); lcd.setCursor(14, 1); lcd.write(byte(7)); }
Esempio 2
In questo secondo esempio mostriamo come visualizzare l’icona del Pacman che va avanti e indietro sulla prima riga del display
/* * Prof. Michele Maffucci * Crezione di caratteri personali * Utilizzo di un display LCD1602 Keypad Shield della Keyestudio * Data: 19.03.2021 * * Movimento verso destra e sinistra di una icona (alieno) */ // inclusione della libreria LiquidCrystal.h #include <LiquidCrystal.h> // inizializza la libreria con i numeri dei pin dell'interfaccia LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Velocità con cui viene stampato il l'icona int velocita = 300; // caratteri personalizzati byte alieno[8] = { 0b10001, 0b01010, 0b11111, 0b10101, 0b11111, 0b11111, 0b01010, 0b11011 }; void setup() { // impostazione del numero di colonne e righe del display lcd.begin(16, 2); // creazione nuovi caratteri lcd.createChar(4, alieno); // visualizzazione sul display del nome // dell'attività // Cancella il display lcd.clear(); // Stampa la stringa lcd.print("PCTO a.s. 20/21"); delay(1000); // Cancella il display lcd.clear(); } void loop() { // Movimento verso destra del carattere for (int contatorePosizioneColonna = 0; contatorePosizioneColonna < 16; contatorePosizioneColonna++) { // Cancella il display lcd.clear(); // Spostamento di una posizione verso destra del cursore lcd.setCursor(contatorePosizioneColonna, 0); // Stampa del icona: alieno lcd.write(byte(4)); // Attesa di un'istante per percepire il movimento del carattere delay(velocita); } // Movimento verso sinistra del carattere for (int contatorePosizioneColonna = 16; contatorePosizioneColonna > 0; contatorePosizioneColonna--) { // Cancella il display lcd.clear(); // Spostamento di una posizione verso sinistra del cursore lcd.setCursor(contatorePosizioneColonna, 0); // Stampa del icona: alieno lcd.write(byte(4)); // Attesa di un'istante per percepire il movimento del carattere delay(velocita); } }
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.
/* Prof. Michele Maffucci Crezione di caratteri personali Utilizzo di un display LCD1602 Keypad Shield della Keyestudio Data: 19.03.2021 Movimento verso destra e sinistra di una icona (Pacman) Durante il movimento il Pacman apre e chiude la bocca */ // inclusione della libreria LiquidCrystal.h #include <LiquidCrystal.h> // inizializza la libreria con i numeri dei pin dell'interfaccia LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Velocità con cui viene stampato il l'icona int velocita = 300; // caratteri personalizzati byte pacmanBoccaChiusa[8] = { 0b01110, 0b11101, 0b11111, 0b11111, 0b11000, 0b11111, 0b11111, 0b01110 }; byte pacmanBoccaAperta[8] = { 0b01110, 0b11101, 0b11111, 0b11100, 0b11000, 0b11000, 0b11111, 0b01110 }; void setup() { // impostazione del numero di colonne e righe del display lcd.begin(16, 2); // creazione nuovi caratteri lcd.createChar(0, pacmanBoccaChiusa); lcd.createChar(1, pacmanBoccaAperta); // Cancella il display lcd.clear(); // Stampa la stringa lcd.print("PCTO a.s. 20/21"); } void loop() { // Movimento verso destra del carattere for (int contatorePosizioneColonna = 0; contatorePosizioneColonna < 16; contatorePosizioneColonna++) { // Cancella il display lcd.clear(); // Spostamento di una posizione verso destra del cursore lcd.setCursor(contatorePosizioneColonna, 0); if (contatorePosizioneColonna % 2 == 0) { // Stampa del icona: Pacman bocca chiusa lcd.write(byte(0)); } else { // Stampa del icona: Pacman bocca aperta lcd.write(byte(1)); } // Attesa di un'istante per percepire il movimento del carattere delay(velocita); } // Movimento verso sinistra del carattere for (int contatorePosizioneColonna = 16; contatorePosizioneColonna > 0; contatorePosizioneColonna--) { // Cancella il display lcd.clear(); // Spostamento di una posizione verso sinistra del cursore lcd.setCursor(contatorePosizioneColonna, 0); if (contatorePosizioneColonna % 2 == 0) { // Stampa del icona: Pacman bocca chiusa lcd.write(byte(0)); } else { // Stampa del icona: Pacman bocca aperta lcd.write(byte(1)); } // Attesa di un'istante per percepire il movimento del carattere delay(velocita); } }
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 🙂