Go Down

Topic: LCD 20×4 (Read 217 times) previous topic - next topic

vincenzO88

Salve, vorrei cominciare un progetto dove mi interesserebbe avere nel display lcd 20×4, il disegno di una batteria (come quella che si trova nel display di ogni smartphone). Spero possiate aiutarmi...

gpb01

#1
Aug 17, 2019, 06:55 pm Last Edit: Aug 17, 2019, 06:56 pm by gpb01
Gli LCD hanno il set di caratteri fisso, ma ci sono otto posizioni che invece sono programmabili disegnando il simbolo pixel a pixel ...

Ti allego il datasheet del più diffuso controller per LCD (sono tutto compatibili con questo) così vedi dove sono mappati e come si fano i caratteri "custom" (CGRAM) .

Devi disegnarti vari elementi per rappresentare la batteria a pezzi (pieni o vuoti) per indicare i vari valori di carica.

Guglielmo

P.S.: Normalmente, le librerie per LCD, già prevedono delle funzioni per la memorizzazione di tali caratteri.
Search is Your friend ... or I am Your enemy !

steve-cr

#2
Aug 17, 2019, 07:22 pm Last Edit: Aug 17, 2019, 07:24 pm by steve-cr
Poi capisco anche che vorresti sapere come si fa in pratica... :D

All'inizio del programma, definisci i caratteri che ti servono (io avevo bisogno di una freccia verso l'alto, una verso il basso ed una destra-sinistra per vedere se l'umidità era in salita, stabile oppure in discesa)

Code: [Select]
#include <PCF8574_HD44780_I2C.h>

PCF8574_HD44780_I2C lcd(0x27,20,4);

// make some custom characters:
byte arrowUp[8] = {
  0b00100,
  0b01110,
  0b10101,
  0b00100,
  0b00100,
  0b00100,
  0b00100,
  0b00000
};

byte arrowDn[8] = {
  0b00100,
  0b00100,
  0b00100,
  0b00100,
  0b10101,
  0b01110,
  0b00100,
  0b00000
};

byte stable[8] = {
  0b00000,
  0b00000,
  0b01010,
  0b11111,
  0b01010,
  0b00000,
  0b00000,
  0b00000
};


Poi, nel SETUP, passi i tuoi caratteri al programma:

Code: [Select]
void setup() {

  // Init LCD
  
  lcd.init ();

  // create new characters
  lcd.createChar(0, arrowUp);
  lcd.createChar(1, arrowDn);
  lcd.createChar(2, stable);


...e nel momento che li vuoi far apparire sul LCD li scrivi così:

Code: [Select]
     lcd.setCursor (18,2);
      if (RH==RHave) lcd.write(byte(2)); // scrittura caratteri speciali
      if (RH<RHave)  lcd.write(byte(1));
      if (RH>RHave)  lcd.write(byte(0));


Per la tua batteria (che per forza di cose disegnerai in verticale) puoi fare tre o quattro caratteri con i vari livelli di riempimento, come nei telefonini.

Quello te lo lascio disegnare a te  :D
Samantha Cristoforetti: "Mi fai fare un giro sul tuo ultraleggero?". "Certamente, però piloto io !"

vincenzO88

grazie, per le risposte, molto esaustivi entrambi. Invece se volessi utilizzare un oled o un display tfy? verrebbe più facile e magari la qualità sarebbe migliore? o è tutto il contrario?

gpb01

#4
Aug 17, 2019, 07:37 pm Last Edit: Aug 17, 2019, 07:39 pm by gpb01
grazie, per le risposte, molto esaustivi entrambi. Invece se volessi utilizzare un oled o un display tfy?
... sempre a manina i vari simboli ti devi disegnare e sempre come serie di bit disposti per righe o colonne li devi memorizzare :D

Guglielmo

>steve-cr: ... senza dare sempre la "pappa fatta" basta magari suggerire agli utenti di studiarsi gli esempi delle librerie ... "CustomChars" per l'estattezza   :smiley-evil:
Search is Your friend ... or I am Your enemy !

vincenzO88

Grazie di nuovo. Vorrei avere un'ultima informazione, per un tft quale libreria bisogna consultare?

gpb01

Grazie di nuovo. Vorrei avere un'ultima informazione, per un tft quale libreria bisogna consultare?
Dipende dal chip che controlla il TFT ... Adafruit ha una libreria per i TFT che vende lei, Rinky-Dink Electronics ha altre librerie ottimizzate per un'altra serie di chip e così via ...

Guglielmo
Search is Your friend ... or I am Your enemy !

Go Up