Il Display LCD 16×2 (del quale potete trovare le specifiche tecniche qui) mi ha dato parecchio da fare.
L’ho iniziato oltre 9 mesi fa, poi mi sono arenato, spazientito e gliel’ho data sù, avevo anche altro da fare.
Ma ad un certo punto ho deciso di tornarci addosso, riprendere da dove avevo interrotto e, ahimè, non riuscivo più a farlo funzionare !!!
Praticamente riuscivo solo ad accendere la retroilluminazione e variare il contrasto con il potenziometro (o resistore variabile), ma nulla più. Temevo pure che si fosse rotto il display.
Tuttavia, la sensazione che il problema fosse sì hardware ma collegato a falsi contatti, mi ha lasciato aperta la speranza e ho deciso di procurarmi un saldatore economico per creare qualcosa di più “stabile”.
Su Amazon ho acquistato il Meterk Soldering Iron Kit da 60W a circa 18€ – spedizione inclusa – che trovate qui: https://www.amazon.it/dp/B0761GYZWQ

Di colpo tutto è ripartito, con mia grande soddisfazione.
Lo schema di collegamento, aldilà del resistore variabile, è identico a quello proposto dal Tutoria Kuman, io l’ho solo ridisegnato con Fritzing:

Questo il codice per arduino – fotocopia di quello fornito dal Kit, giusto un po’ adeguato alla data di pubblicazione di questo articolo – da utilizzare per farlo funzionare:
int DI = 12;
int RW = 11;
int DB[] = {3, 4, 5, 6, 7, 8, 9, 10};//Use an array to define the pins needed by the bus
int Enable = 2;
void LcdCommandWrite(int value) {
// Define all pins
int i = 0;
for (i = DB[0]; i <= DI; i++) //Bus assignment
{
digitalWrite(i, value & 01); //Because the 1602 liquid crystal signal recognition is D7-D0 (not D0-D7), here is used to reverse the signal.
value >>= 1;
}
digitalWrite(Enable, LOW);
delayMicroseconds(1);
digitalWrite(Enable, HIGH);
delayMicroseconds(1); // 延时1ms
digitalWrite(Enable, LOW);
delayMicroseconds(1); // 延时1ms
}
void LcdDataWrite(int value) {
// Define all pins
int i = 0;
digitalWrite(DI, HIGH);
digitalWrite(RW, LOW);
for (i = DB[0]; i <= DB[7]; i++) {
digitalWrite(i, value & 01);
value >>= 1;
}
digitalWrite(Enable, LOW);
delayMicroseconds(1);
digitalWrite(Enable, HIGH);
delayMicroseconds(1);
digitalWrite(Enable, LOW);
delayMicroseconds(1); //Delay 1ms
}
void setup (void) {
int i = 0;
for (i = Enable; i <= DI; i++) {
pinMode(i, OUTPUT);
}
delay(100);
// After a short pause, LCD
// For LCD control needs
LcdCommandWrite(0x38); // Set to 8-bit interface, 2 line display, 5x7 text size
delay(64);
LcdCommandWrite(0x38); // Set to 8-bit interface, 2 line display, 5x7 text size
delay(50);
LcdCommandWrite(0x38); //Set to 8-bit interface, 2 line display, 5x7 text size
delay(20);
LcdCommandWrite(0x06); // Input mode setting
// Auto increment, no display shift
delay(20);
LcdCommandWrite(0x0E); // Display settings
// Turn on the display, the cursor shows, no flicker
delay(20);
LcdCommandWrite(0x01); // The screen is empty, the cursor position is zero
delay(100);
LcdCommandWrite(0x80); // Display settings
// Turn on the display, the cursor shows, no flicker
delay(20);
}
void loop (void) {
LcdCommandWrite(0x01); // The screen is empty, the cursor position is zero
delay(10);
/*
* 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6
* B u o n e F e s t e e
* F e l i c e 2 0 1 9
*/
LcdDataWrite(' ');
LcdDataWrite(' ');
LcdDataWrite('B');
LcdDataWrite('u');
LcdDataWrite('o');
LcdDataWrite('n');
LcdDataWrite('e');
LcdDataWrite(' ');
LcdDataWrite('F');
LcdDataWrite('e');
LcdDataWrite('s');
LcdDataWrite('t');
LcdDataWrite('e');
LcdDataWrite(' ');
LcdDataWrite('e');
LcdDataWrite(' ');
delay(10);
LcdCommandWrite(0xc0); // Defines the cursor position as second rows and second positions
delay(10);
LcdDataWrite(' ');
LcdDataWrite('F');
LcdDataWrite('e');
LcdDataWrite('l');
LcdDataWrite('i');
LcdDataWrite('c');
LcdDataWrite('e');
LcdDataWrite(' ');
LcdDataWrite('2');
LcdDataWrite(' ');
LcdDataWrite('0');
LcdDataWrite(' ');
LcdDataWrite('1');
LcdDataWrite(' ');
LcdDataWrite('9');
LcdDataWrite(' ');
delay(5000);
}
Il risultato potete vederlo su questo video che ho caricato su YouTube :
Vi metto anche il link a tutto il materiale che potete scaricare per comodità:
- Elenco del materiale necessario: Lezione_9_Display_LCD_1602_bom.html
- Sorgente Arduino: Lezione_9_Display_LCD_1602.ino
- Schema Fritzing: Lezione_9_Display_LCD_1602.fzz