#include <LiquidCrystal_PCF8574.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
LiquidCrystal_PCF8574 lcd(0x27);
#define ONE_WIRE_BUS 4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
float tempC;
// Usamos el código hexadecimal del símbolo de grado (0xDF) que es más estándar en LCDs
const char GRADOS_SYM = 0xDF;
void setup() {
sensors.begin();
// Es recomendable bajar la resolución si necesitas lecturas más rápidas (9 a 12 bits)
sensors.setResolution(10);
lcd.begin(20, 4);
delay(200);
lcd.setBacklight(255);
lcd.setCursor(0, 0);
lcd.print("Temperatura:");
}
void loop() {
sensors.requestTemperatures();
tempC = sensors.getTempCByIndex(0);
// Validamos que la temperatura sea mayor a -120 para evitar el error de desconexión (-127)
// y que esté dentro del rango lógico del sensor
if (tempC > -120.0 && tempC < 150.0) {
lcd.setCursor(13, 0);
lcd.print(tempC, 1); // Imprime con 1 decimal
lcd.write(GRADOS_SYM);
lcd.print("C ");
}
else {
// Si la lectura es -127 o fuera de rango
lcd.setCursor(13, 0);
lcd.print("Error! ");
}
// Pequeña pausa para no saturar el LCD, pero permitiendo que el sensor procese
delay(500);
}