Caratteri personalizzati Display LCD

Ciao a tutti, oggi vi propongo questo tutorial molto interessante e divertente per chi, come me, è un appassionato del display lcd 🙂 . Ovvero vi mostrerò come realizzare dei caratteri personalizzati da stampare sul display lcd. Innanzitutto se non sapete come collegare un display ad Arduino vi consiglio di leggere QUESTO articolo, altrimenti non capirete i passaggi successivi.

Come sapete ogni carattere stampato sul display è formato da 5×8 pixel accesi o spenti (1, 0) in modo da creare il carattere voluto. Prima di tutto bisogna procurarsi questa griglia formata da 5 colonne e 8 righe , ovvero le dimensioni del font.

tabella_punti_lcd

A questo punto bisogna riempire i quadrati, ovvero i pixel accesi, in modo da creare il carattere voluto.

Analizzando la griglia come notate la prima riga è vuota per cui il valore di questa è uguale a zero. Mentre nella seconda riga sono stati riempiti i pixel in colonna 1 e 3. Con la codifica binaria dovrete perciò fare (2 ^1 + 2^3 ) ossia ( 2+8 = 10 ), che è il valore in decimale, mentre in hex equivale a 0x0A ed in binario a 01010. Ripetendo il processo per tutte le altre righe usciranno fuori i valori come mostrati in figura.

Ora vi starete chiedendo “Perché sia troppo uno stress creare un carattere personalizzato”, bene ora che avete capito come funziona il tutto, per rendervi la vita più semplice, a questo LINK  potrete trovare un ottimo generatore molto semplice da utilizzare ed oltre a farvi i calcoli come visto prima, vi genererà anche lo sketch da caricare su Arduino. Ottimo direi 🙂 …

Ora passiamo ad alcuni sketch di esempio da caricare su Arduino.

Sketch Smile

#include <LiquidCrystal.h>

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

byte Smile[8] = {
  B00000,
  B10001,
  B00000,
  B00000,
  B10001,
  B01110,
  B00000,
};

void setup() {
  lcd.createChar(0, Smile);
  lcd.begin(16, 2);  
  lcd.write(byte(0));
}

void loop() {}

 Sketch Cuore

#include 

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

byte Cuore[8] = {
        B00000,
        B01010,
        B11111,
        B11111,
        B11111,
        B01110,
        B00100,
        B00000
};

void setup() {
  lcd.createChar(0, Cuore);
  lcd.begin(16, 2);  
  lcd.write(byte(0));
}

void loop() {}

Sketch Omega

#include <LiquidCrystal.h>

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

byte Omega[8] = {
        B00000,
        B01110,
        B10001,
        B10001,
        B10001,
        B01010,
        B11011,
        B00000
};

void setup() {
  lcd.createChar(0, Omega);
  lcd.begin(16, 2);  
  lcd.write(byte(0));
}

void loop() {}

Sketch con i 3 caratteri

#include <LiquidCrystal.h>

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

byte Smile[8] = {
  B00000,
  B10001,
  B00000,
  B00000,
  B10001,
  B01110,
  B00000,
};

byte Cuore[8] = {
        B00000,
        B01010,
        B11111,
        B11111,
        B11111,
        B01110,
        B00100,
        B00000
};

byte Omega[8] = {
        B00000,
        B01110,
        B10001,
        B10001,
        B10001,
        B01010,
        B11011,
        B00000
};

void setup() {
  lcd.createChar(0, Smile);
  lcd.createChar(1, Cuore);
  lcd.createChar(2, Omega);
  lcd.begin(16, 2);
  
  lcd.setCursor(5,0);  //Smile
  lcd.write(byte(0));
  
  lcd.setCursor(7,0);  //Cuore
  lcd.write(byte(1));
  
  lcd.setCursor(9,0);  //Omega
  lcd.write(byte(2));
}

void loop() {}

Come vedete dagli esempi per creare un carattere personalizzato si definisce un array (Smile, Cuore, Omega) che contiene i valori in binario calcolati precedentemente, è possibile scegliere se inserire valori in decimale, esadecimale o binario, secondo le vostre preferenze. Nella fase di setup viene utilizzata la funzione createChar. Il primo parametro passato è il numero di carattere che vogliamo ridefinire. Il secondo è l’array contenente i dati binari sopra calcolati. Con l’istruzione lcd.write(byte(0)) viene stampato sullo schermo il nostro carattere per cui il risultato sarà qualcosa simile all’immagine che vedete ad inizio pagina. Il loop è vuoto perché non abbiamo necessità di fare null’altro.

Spero vi sia piaciuto questo articolo. Se avete dubbi o problemi commentate qui sotto o utilizzate il forum. A presto 🙂