Arduino (L3): scrivere su display LCD 16×2

Un display lcd 16×2 consente di scrivere su due righe un massimo di 16 caratteri per ognuna.

Per regolare il contrasto è fondamentale l’uso di un potenziometro (presente all’interno dello starter kit). Inoltre collegando gli ultimi due pin (sfruttando una resistenza da 220 Ohm) si può usufruire della retroilluminazione.

In questo articolo non ci limiteremo all’esempio già incluso sul software di Arduino (si trova in File – Esempi – LiquidCrystal) che consiste nel visualizzare un testo di massimo 16 caratteri nella prima riga e un contatore di secondi nell’altra. Bensì vedremo come far lampeggiare un testo e superare il limite dei 16 caratteri con lo stratagemma del testo alternato oppure del testo scorrevole.

Cosa serve?

  • Arduino (o compatibile)
  • Breadboard
  • Display lcd 16×2
  • potenziometro
  • resistenza da 220 Ohm
  • cavi

 

Ricordiamo che è consigliabile usare, per quanto possibile in base alla disponibilità, dei colori diversi per i vari cavi. Generalmente in elettronica, con il colore nero si identifica il cavo che va collegato alla massa (negativo) e col rosso quello dell’alimentazione (positivo).

  1. LCD VSD alla massa della breadboard
  2. LCD VDD al positivo della breadboard
  3. LCD VO al pin centrale del potenziometro
  4. LCD RS al pin digitale 2
  5. LCD RW alla massa della breaboard
  6.  LCD Enable al pin digitale 3
  7.  LCD D4 al pin digitale 4
  8.  LCD D5 al pin digitale 5
  9.  LCD D6 al pin digitale 6
  10.  LCD D7 al pin digitale 7
  11.  LCD A una resistenza da 220 Ohm che va al positivo della breadboard
  12.  LCD K al negativo della breadboard

Inoltre bisognerà alimentare il display pertanto da Arduino collegare un cavo che va dal +5 al positivo della breadborad, e un altro che va da ground (massa) al negativo della breadboard.

Analogamente anche il potenziometro va alimentato. Pertanto collegare un cavo dal pin sinistro alla massa della breadboard e un altro cavo dal pin destro al positivo della breadboard.

Testo e contatore

// includi la libreria:
#include <LiquidCrystal.h>
// inizializza la libreria con i numeri dei pin utilizzati
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
void setup() {
// imposta il numero di colonne e righe del display utilizzato:
lcd.begin(16, 2);
// Stampa il messaggio sull’LCD.
lcd.print(“Computereweb.eu”);
}
void loop() {
// Metti il cursore alla colonna 0, riga 1
// (nota: la riga 1 è la seconda perchè il conteggio parte da 0):
lcd.setCursor(0, 1);
// Stampa il numero dei secondi trascorsi dal reset:
lcd.print(millis()/1000);
}

Testo lampeggiante

*Nota: in questo codice, e in quelli successivi, si richiama solo il codice della prima riga; mentre per visualizzare solamente la riga 2 far precedere l’istruzione lcd.print con lcd.setCursor(0, 1);

#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
void setup() {
lcd.begin(16, 2);
}
void loop() {
lcd.print(“Computereweb.eu”);
delay(1000);
lcd.clear();
delay(1000);
}

Messaggi alternati

#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
void setup() {
lcd.begin(16, 2);
}
void loop() {
lcd.print(“Computereweb.eu”);
delay(5000);
lcd.clear();
delay(5000);
lcd.print(“Appunti sul web”);
delay(5000);
lcd.clear();
delay(5000);
lcd.print(“Test su Arduino”);
delay(5000);
lcd.clear();
delay(5000);
lcd.print(“Esempi pratici”);
delay(5000);
lcd.clear();
delay(5000);
}

Testo scorrevole

Da destra a sinistra

#include <LiquidCrystal.h> // Libreria per gestire il Display LCD
#define nCOL 44

LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

void setup()
{
lcd.print(“Computereweb.eu – Progetti vari su Arduino -“);
}

void loop()
{
int i;
// Questo ciclo sposta il testo da destra a sinistra della prima riga
for (i = 0; i < nCOL; i++)
{
// Sposta il contenuto del display di una colonna a sinistra
lcd.scrollDisplayLeft();
delay(1000); // Tempo espresso in mille secondi, dove 1.000 corrisponde a un secondo
}
}

Cronometro automatico

Ingresso al pin 2.
Misura il tempo di ON e di OFF di un segnale ad onda quadra.
I due tempi si azzerano al reinizio del ciclo.
*/

#include <LiquidCrystal.h>

# define SET 2

LiquidCrystal lcd(2,3,4,5,6,7);
int m, mu=0,md=0;
int s, su=0,sd=0;
int l, lu=0,ld=0,lc=0;
int pin2;
long int tempo,inizio;

void setup()

{ pinMode(SET, INPUT);
pin2=LOW;
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print(“ON”);
lcd.setCursor(5, 0);
lcd.print(“00:00:000”);
lcd.setCursor(0, 1);
lcd.print(“OFF”);
lcd.setCursor(5, 1);
lcd.print(“00:00:000”);
}

void loop() {
//**************** Tempo in cui il pin 2 è HIGH ********************
pin2=digitalRead(2);
if ( pin2==HIGH)
{ inizio=millis();
//Cronometra e trasforma in sessagesimali il tempo di ON
while (pin2==HIGH)
{ tempo=millis()-inizio;
m=(tempo/1000)/60;
mu=m%10;
md=(m-mu)/10;
s=(tempo/1000)%60;
su=s%10;
sd=(s-su)/10;
l=(tempo%1000);
lu=l%10;
ld=((l-lu)/10)%10;
lc=(l-(ld*10)-lu)/100;
// Stampa sulla prima riga il tempo di ON
lcd.setCursor(5, 0);
lcd.print(md);
lcd.print(mu);
lcd.print(“:”);
lcd.print(sd);
lcd.print(su);
lcd.print(“:”);
lcd.print(lc);
lcd.print(ld);
lcd.print(lu);
pin2=digitalRead(SET); } } // Fine sottoprogramma tempo di HIGH

//**************** Tempo in cui il pin 2 è LOW ********************
pin2=digitalRead(2);
if ( pin2==LOW)
{ inizio=millis();
//Cronometra e trasforma in sessagesimali il tempo di OFF
while( pin2==LOW)
{ tempo=millis()-inizio;
m=(tempo/1000)/60;
mu=m%10;
md=(m-mu)/10;
s=(tempo/1000)%60;
su=s%10;
sd=(s-su)/10;
l=(tempo%1000);
lu=l%10;
ld=((l-lu)/10)%10;
lc=(l-(ld*10)-lu)/100;
// Stampa sulla seconda riga il tempo di OFF
lcd.setCursor(5, 1);
lcd.print(md);
lcd.print(mu);
lcd.print(“:”);
lcd.print(sd);
lcd.print(su);
lcd.print(“:”);
lcd.print(lc);
lcd.print(ld);
lcd.print(lu);
pin2=digitalRead(SET); }} // Fine sottoprogramma tempo di LOW

}//———-Fine Programma

loading...

1 commento su Arduino (L3): scrivere su display LCD 16×2

  1. Trovo interessanti tutti gli argomenti.Sono un principiante e desidero chiedervi cosa sono e come immetterli nello sketch: #define nCOL 44 e # define SET 2. Grazie e complimenti ancora

Lascia un commento

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