⬤ LCD · Iniciante
🌡️ Dados de Sensores no LCD
⏱️ 25 min🧩 Sensores + LCD · Formatação · Anti-flickering
📐 Layout das 4 Linhas
Temp: 23.5C Hum:61%Luz: 412 (40%) Motor: FWD 180/255 Estado: OK 14:23:05
💡Convenção: linha 0 = dados ambientais · linha 1 = dados físicos · linha 2 = estado do atuador · linha 3 = estado geral e tempo.
✅ Atualização sem Flickering
ex_sensores.ino
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
float ultT = -99;
int ultL = -1;
void setup() {
lcd.init(); lcd.backlight();
lcd.setCursor(0,0); lcd.print("Temp: C ");
lcd.setCursor(0,1); lcd.print("Luz: ");
}
void loop() {
float t = analogRead(A0) * 0.48828; // LM35 ~10mV/°C
int l = analogRead(A1);
if(abs(t - ultT) > 0.2) { // só atualiza se mudou >0.2°C
lcd.setCursor(6,0); lcd.print(t,1); lcd.print(" ");
ultT = t;
}
if(abs(l - ultL) > 5) { // só se mudou >5 raw
lcd.setCursor(5,1); lcd.print(l); lcd.print(" ");
ultL = l;
}
delay(200);
}
📊 4 Sensores — 4 Linhas Preenchidas
ex_4linhas.ino
unsigned long inicio = millis();
void loop() {
float t = analogRead(A0) * 0.48828;
int l = analogRead(A1);
bool btn = (digitalRead(4)==LOW);
unsigned long seg = (millis()-inicio)/1000;
lcd.setCursor(0,0); lcd.print("T:");lcd.print(t,1);lcd.print("C L:");lcd.print(l);lcd.print(" ");
lcd.setCursor(0,1); lcd.print("Botao: ");lcd.print(btn?"PREMIDO":"solto ");
lcd.setCursor(0,2); lcd.print("Uptime: ");lcd.print(seg);lcd.print("s ");
lcd.setCursor(0,3); lcd.print("PR.FT9_5 OK ");
delay(250);
}
🏆 Para ir mais longe
- Adiciona DHT11 e mostra T e H na mesma linha: 'T:23.5 H:61%'
- Cria indicador na linha 3: OK / ATENÇÃO / ALERTA baseado em limiares
- Usa millis() para actualizar temperatura a cada 2s e luz a cada 300ms — ritmos diferentes
- Exibe barra horizontal de luz: 0–1023 → 0–20 chars '|' na linha 3