Início›Biblioteca LCD
⬤ LCD · Referência fundamental

🖥️ Biblioteca LiquidCrystal_I2C

⏱️ 25 min📚 Referência completa de métodos · Anti-flickering · Formatação

Nesta página

🚀 Inicializar o LCD

lcd_init.ino
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Construtor: endereço I2C, colunas, linhas
LiquidCrystal_I2C lcd(0x27, 20, 4);

void setup() {
  lcd.init();        // Inicializar o controlador I2C + HD44780
  lcd.backlight(); // Ligar retroiluminação (padrão: apagada)
  lcd.setCursor(0, 0);
  lcd.print("LCD pronto!");
}

📍 setCursor() — Mapa das 4 Linhas

setCursor(0,0) → linsetCursor(0,1) → linsetCursor(0,2) → linsetCursor(0,3) → lin
ℹ️
Coluna 0 é a mais à esquerda; linha 0 é a mais acima. setCursor(19,3) é o último caractere do ecrã. A contagem começa sempre em zero.
lcd_posicionar.ino
// Preencher as 4 linhas com rótulo + valor
void dashboard(float t, float h, int luz, int vel) {
  lcd.setCursor(0, 0); lcd.print("Temp: "); lcd.print(t,1); lcd.print(" C  ");
  lcd.setCursor(0, 1); lcd.print("Hum:  "); lcd.print(h,1); lcd.print(" %  ");
  lcd.setCursor(0, 2); lcd.print("Luz:  "); lcd.print(luz);  lcd.print("    ");
  lcd.setCursor(0, 3); lcd.print("Motor:"); lcd.print(vel);  lcd.print("/255  ");
}

📋 Tabela de Métodos

MétodoO que fazNota
lcd.init()Inicializa o controlador I2C + HD44780Chamar em setup() antes de tudo
lcd.backlight()Liga a retroiluminação—
lcd.noBacklight()Desliga a retroiluminação (display continua visível)Útil para poupança de energia
lcd.setCursor(col, row)Move o cursor para coluna 0–19, linha 0–3Próximo print() começa aqui
lcd.print(x)Escreve texto, int, float, charlcd.print(3.14, 2) → "3.14"
lcd.write(byte)Escreve 1 byte (char custom ou ASCII)lcd.write(0) → char CGRAM slot 0
lcd.clear()Apaga todo o ecrã e volta cursor a (0,0)Lento ~2ms — causa flickering se em loop()
lcd.home()Volta cursor a (0,0) sem apagarMais rápido que clear()
lcd.cursor()Mostra cursor sublinhadoÚtil em menus
lcd.noCursor()Esconde cursor (comportamento padrão)—
lcd.blink()Activa cursor piscante tipo block—
lcd.noBlink()Desactiva cursor piscante—
lcd.createChar(slot, bitmap)Define char personalizado na CGRAMSlots 0–7; chamar antes de init()
lcd.scrollDisplayLeft()Desloca todo o conteúdo 1 pos à esquerdaPara scroll de mensagens longas

✅ Técnica Anti-Flickering

⚠️
Nunca uses lcd.clear() dentro do loop() — apaga e reescreve o ecrã a cada ciclo causando um cintilamento visível. Actualiza apenas a zona que mudou.
antiflicker.ino
// ❌ MAU — flickering: lcd.clear() no loop
void loop_mau() {
  lcd.clear();
  lcd.print(analogRead(A0));
  delay(500);
}

// ✅ BOM — sobrescreve com espaços
void loop_bom() {
  lcd.setCursor(0, 0);
  lcd.print(analogRead(A0));
  lcd.print("    ");  // espaços apagam dígitos anteriores
  delay(500);
}

// ✅ MELHOR — só atualiza se o valor mudou
int ultimo = -1;
void loop_melhor() {
  int v = analogRead(A0);
  if (v != ultimo) {
    lcd.setCursor(0, 0);
    lcd.print(v); lcd.print("    ");
    ultimo = v;
  }
}

🔢 Formatar Números

lcd_formatar.ino
// Float com 1 decimal: "23.5 C"
lcd.print(temp, 1); lcd.print(" C  ");

// Inteiro com largura fixa de 3 (ex: " 42")
void print3(int v) {
  if(v < 100) lcd.print(" ");
  if(v < 10)  lcd.print(" ");
  lcd.print(v);
}

// HH:MM:SS a partir de segundos totais
void printTempo(unsigned long s) {
  int h = s/3600, m=(s%3600)/60, sec=s%60;
  if(h<10) lcd.print("0"); lcd.print(h); lcd.print(":");
  if(m<10) lcd.print("0"); lcd.print(m); lcd.print(":");
  if(sec<10) lcd.print("0"); lcd.print(sec);
}

🏆 Para ir mais longe

PR.FT9_5 · LCD 20×4 · L293D Motor Driver · Arduino UNO Rev3 · Início · led.dge.medu.pt