Come usare un display LCD 16x2 con Arduino senza I2C
Il classico display LCD 16x2 blu è uno dei componenti più utili per iniziare con Arduino. Può mostrare 16 caratteri per riga su 2 righe ed è perfetto per visualizzare misure, menu, messaggi e stati del progetto. Qui vedremo prima come funziona, poi tutti i 16 pin e infine come pilotarlo subito con la libreria LiquidCrystal.
Componenti necessari:
- 1x Arduino UNO
- 1x Display LCD 16x2 (senza I2C)
- 1x Potenziometro da 10 kΩ
- Cavi jumper (breadboard opzionale)
Immagine del display
Come funziona un display LCD 16x2
La maggior parte dei moduli 16x2 usa un controller compatibile con HD44780. Arduino non controlla direttamente ogni pixel: invia al controller comandi e dati. I comandi servono, per esempio, a cancellare il display o spostare il cursore; i dati rappresentano i caratteri da visualizzare.
Il controller conserva le posizioni dei caratteri in memoria e genera automaticamente le piccole matrici di punti che formano lettere e numeri. Il display può lavorare con un bus a 8 bit oppure a 4 bit. Con Arduino si usa quasi sempre la modalità a 4 bit, perché richiede meno pin.
A cosa servono tutti i 16 pin
Pin 1 - VSS
Massa del display: collegalo a GND.
Pin 2 - VDD
Alimentazione positiva. Nei comuni moduli per Arduino UNO viene normalmente collegata a 5 V.
Pin 3 - VO
Regola il contrasto. Collegalo al cursore centrale di un potenziometro da circa 10 kΩ; gli altri due terminali del potenziometro vanno a 5 V e GND.
Pin 4 - RS
Register Select: dice al display se stai inviando un comando oppure un carattere.
Pin 5 - R/W
Seleziona lettura o scrittura. Nei progetti semplici si collega a GND e si usa il display solo in scrittura.
Pin 6 - E
Enable: un impulso su questo pin comunica al controller di acquisire i dati presenti sul bus.
Pin 7-10 - D0, D1, D2, D3
Sono i quattro bit meno significativi del bus dati. In modalità 4 bit non vengono usati e possono rimanere scollegati.
Pin 11-14 - D4, D5, D6, D7
Sono i quattro pin dati usati in modalità 4 bit. Arduino invia ogni byte in due gruppi da quattro bit.
Pin 15 - A / LED+
Positivo della retroilluminazione. Molti moduli integrano già una resistenza, ma non tutti: controlla il tuo modello prima di collegarlo direttamente all'alimentazione.
Pin 16 - K / LED-
Negativo della retroilluminazione, normalmente collegato a GND.
Collegamento a 4 bit con Arduino UNO
- VSS → GND
- VDD → 5V
- VO → cursore del potenziometro
- RS → pin 2
- R/W → GND
- E → pin 3
- D4 → pin 4
- D5 → pin 5
- D6 → pin 6
- D7 → pin 7
- A / LED+ → alimentazione della retroilluminazione secondo il modulo
- K / LED- → GND
D0-D3 restano scollegati. Se cambi i pin Arduino puoi farlo liberamente, purché aggiorni gli stessi numeri anche nel programma.
Libreria Arduino LiquidCrystal
Per il display parallelo si usa la libreria ufficiale LiquidCrystal, normalmente già inclusa nell'Arduino IDE. La riga LiquidCrystal lcd(2, 3, 4, 5, 6, 7); indica nell'ordine i pin RS, E, D4, D5, D6 e D7.
Primo codice: scrivere sulle due righe
// https://nemiatools.com
#include <LiquidCrystal.h>
// RS, E, D4, D5, D6, D7
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
void setup() {{
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Hello Arduino!");
lcd.setCursor(0, 1);
lcd.print("NEMIA TOOLS");
}}
void loop() {{
}}
lcd.begin(16, 2) inizializza un display da 16 colonne e 2 righe. lcd.setCursor(colonna, riga) sceglie la posizione: la prima colonna e la prima riga hanno indice 0.
Comandi LiquidCrystal più utili
- lcd.print() scrive testo e numeri.
- lcd.setCursor() sceglie la posizione.
- lcd.clear() cancella tutto il display.
- lcd.home() riporta il cursore all'inizio.
- lcd.cursor() e lcd.noCursor() mostrano o nascondono il cursore.
- lcd.blink() e lcd.noBlink() controllano il lampeggio del cursore.
- lcd.scrollDisplayLeft() e lcd.scrollDisplayRight() fanno scorrere il contenuto.
Esempio: mostrare un valore che cambia
// https://nemiatools.com
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
void setup() {{
lcd.begin(16, 2);
lcd.print("Tempo acceso:");
}}
void loop() {{
lcd.setCursor(0, 1);
lcd.print(millis() / 1000);
lcd.print(" s ");
delay(200);
}}
Gli spazi dopo la lettera s servono a cancellare eventuali cifre rimaste da una stampa precedente. Evita invece di chiamare continuamente lcd.clear() nel loop, perché può creare sfarfallio.
Caratteri personalizzati
I controller compatibili HD44780 possono memorizzare fino a 8 caratteri personalizzati alla volta. Questa funzione permette di creare semplici icone, per esempio una batteria o un termometro, usando una matrice di punti 5x8.
Problemi comuni
Solo rettangoli neri: il display è alimentato ma probabilmente non inizializzato; controlla RS, E e D4-D7. Retroilluminazione accesa ma nessun testo: regola lentamente il potenziometro del contrasto. Caratteri casuali: controlla cablaggio, GND comune e contatti della breadboard.