Come impiegare la libreria LiquidCrystal per scrivere su un display a matrice 20×4

Utilizzare un display risulta utile per una miriade di applicazioni dove è necessario una maggiore interazione con l’utente. Effettuare i collegamenti tra display e Arduino ed utilizzare la libreria LiquidCrystal per gestire il display è una operazione tutto sommato semplice ma nonostante molti utenti alle prime armi trovano alcune difficoltà.

I display a matrice di punti, utilizzano un protocollo comune basato sul chip HD44780 prodotto dalla Hitachi. Sono formati da diverse colonne e righe ed i valori tipici vengono espresso nella forma ColonnexRighe, nel nostro caso il display è un 20×4, quindi composto da 20 colonne per ognuna delle 4 righe (altri tipi possono essere 16×1, 16×2, 128×64, ecc…).

Display a matrice 20 colonne x 4 righe 20x4

L’interfaccia per poter inviare i comandi ed i dati è di tipo parallelo, composta da 16 pin. Nella tabella seguente viene illustrata la pin function:

Numero Pin Descrizione
1 GND collegamento a massa dell’alimentazione del display
2 VCC Alimentazione del display tipicamente 5Vdc
3 Vo Gestisce la luminosita dei pixel del display
4 RS Specifica se vogliamo caricare un dato(Livello Alto) o un comando (Livello basso)
5 R/W Specifica se vogliamo scrivere o leggere dal display
6 E Necessario per far leggere al display il comando o il dato presente sulle linee DB
7 Data bit 0
8 Data bit 1
9 Data bit 2
10 Data bit 3
11 Data bit 4
12 Data bit 5
13 Data bit 6
14 Data bit 7
15 Vcc Alimentazione per la retroilluminazione del display
16 Gnd Massa per la retroilluminazione del display

I pin Data servono per inviare un byte al chip del display. Il valore inviato può essere interpretato sia come un comando (ad esempio per spostare il cursore, per posizionarsi su una riga specifica, per pulire il display) sia un valore ASCII da scrivere sulla matrice. La scelta tra comando e carattere ASCII viene gestita dal livello logico posto sul pin RS.
Il pin E abilita l’esecuzione del comando o la scrittura sulla matrice.

Il circuito seguente è quello che ho realizzato per il tutorial:

Gestione Arduino display 20x4

Nello schema potete notare che i Data Pin non sono collegati completamente ma vengono utilizzati solo i bit più significativi (bit 4, 5, 6, 7). Questa peculiarità è possibile poichè il display supporta la modalità a 4-bit, che essendo implementata anche dalla libreria LiquidCrystal, fa in modo di usare solo 4 file piuttosto che 8.

Il pin6 di Arduino è collegato al pin4 del display per gestire la funzione di RS (Comando/Dato) mentre il pin7 è collegato al pin6 del display E, per far processare al chip del display il Comando o il Dato.

Una volta effettuati i collegamenti, possiamo iniziare con un piccolo sketch di esempio:

[c]
//inserisco la libreria per
//gestire i display a matrice di punti
#include <LiquidCrystal.h>

//creo un oggetto specificando i pin RS il pin E e
//i 4-bit di dati (bit 4, 5, 6, 7)
//collegati rispettivamente ai pin 6, 7, 4, 3, 2
//di arduino come da schema
LiquidCrystal Display20x4(6, 7, 5, 4, 3, 2);

void setup()
{
//il metodo begin permette di impostare il numero di
//colonne e di righe che compongono il display
//nel mio caso il modello è un 20×4
Display20x4.begin(20, 4);

//pulisci il display e posiziona il cursore sulla prima
//riga e sulla prima colonna
Display20x4.clear();

//visualizza il cursore sul display
//per verificare la posizione iniziale
Display20x4.cursor();

//attendi 2 secondi
delay(2000);

//disattivo il cursore
Display20x4.noCursor();

}

void loop()
{
//sposta il cursore alla prima riga e prima colonna
//questa operazione è necessaria se vogliamo
//scrivere il testo sempre nella stessa posizione
//omettendo questa istruzione il testo verrà scritto continuamente
//sul display andando a coprire tutte le righe
Display20x4.home();
//scrivi nella prima riga un testo
Display20x4.print("Logicaprogrammabile");

//ritardo
delay(500);
}

[/c]

La scrittura deve essere composta da una istruzione che gestisce la posizione del cursore e una successiva che effettua la scrittura del testo sul display.

Per scrivere su ogni riga dobbiamo quindi comporre le istruzioni in questo modo:

[c]
void loop()
{
//posiziono il cursore all’inizio della prima riga
Display20x4.setCursor(0,0);
//scrivi nella prima riga un testo
Display20x4.print("ABCDEFGHILMNOPQRSTUV");

Display20x4.setCursor(0,1);
//scrivi nella seconda riga un testo
Display20x4.print("ABCDEFGHILMNOPQRSTUV");

Display20x4.setCursor(0,2);
//scrivi nella terza riga un testo
Display20x4.print("ABCDEFGHILMNOPQRSTUV");

Display20x4.setCursor(0,3);
//scrivi nella quarta riga un testo
Display20x4.print("ABCDEFGHILMNOPQRSTUV");

//ritardo
delay(500);
}
[/c]

Se il testo che printiamo sul display supera i 20 caratteri avremmo una situazione di riscrittura del testo sulla stessa riga, in pratica se abbiamo un testo di 25 caratteri, verranno prima printati 20 caratteri e i rimanenti 5, saranno riscritti nella stessa riga occupando le prime 5 colonne,compromettendo il testo scritto precedentemente.

Se ad esempio scrivessi questo teso (25 caratteri)

ABCDEFGHILMNOPQRSTUV12345

otterrei sul display questa visualizzazione (20 caratteri)

12345FGHILMNOPQRSTUV

L’uso del display risulta quindi molto semplice, la libreria è composta da altri metodi che permettono di effettuare altre operazioni. Nel link seguente potete trovare ulteriori informazioni a riguardo.

Riferimento libreria LyquidCrystal su Arduino.cc