#include <LiquidCrystal_PCF8574.h>
#include <DHT.h>
LiquidCrystal_PCF8574 lcd(0x27);
int Valor_ADC;
float Voltaje;
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
char grados = 223;
#define PIN_I0 18
#define PIN_I1 19
#define PIN_I2 23
#define I0 !digitalRead(PIN_I0)
#define I1 !digitalRead(PIN_I1)
#define I2 !digitalRead(PIN_I2)
#define Q0 15
#define Q1 2
#define Q2 5
char texto[] = "I/O digitales";
byte alto [] = {
0b0000,
0b1111,
0b1111,
0b1111,
0b1111,
0b1111,
0b1111,
0b0000
};
byte bajo [] = {
0b0000,
0b1111,
0b1001,
0b1001,
0b1001,
0b1001,
0b1111,
0b0000
};
void setup() {
lcd.begin(20, 4);
delay(200);
lcd.setBacklight(255);
dht.begin();
pinMode(PIN_I0, INPUT_PULLUP);
pinMode(PIN_I1, INPUT_PULLUP);
pinMode(PIN_I2, INPUT_PULLUP);
pinMode(Q0, OUTPUT);
pinMode(Q1, OUTPUT);
pinMode(Q2, OUTPUT);
lcd.begin(20,4);
lcd.createChar(0, bajo);
lcd.createChar(1, alto);
delay(200);
lcd.setBacklight(255);
lcd.setCursor(14, 0);
lcd.print("D:");
}
void loop() {
digitalWrite(Q0, I0);
digitalWrite(Q1, I1);
digitalWrite(Q2, I2);
float h = dht.readHumidity();
float t = dht.readTemperature();
lcd.setCursor(0,0);
lcd.print(texto);
lcd.setCursor(0,1);
lcd.print("Entradas: ");
lcd.write(I0);
lcd.write(I1);
lcd.write(I2);
lcd.setCursor(0,2);
lcd.print("Salidas : ");
lcd.write(digitalRead(Q0));
lcd.write(digitalRead(Q1));
lcd.write(digitalRead(Q2));
lcd.setCursor(0,3);
if(isnan(h) || isnan(t)){
lcd.print("Sensor error ");
}
else{
lcd.print("T:");
lcd.print(t,1);
lcd.print((char)grados);
lcd.print("C ");
lcd.print("H:");
lcd.print(h,0);
lcd.print("% ");
}
delay(1000);
Valor_ADC = analogRead(36); // GPIO 36 (VP) Lee el valor análogo: 0V a 3.3V
// Ecuación para convertir a voltaje
// Usamos 4095.0 (con el .0) para que el ESP32 entienda que es una operación decimal
Voltaje = (Valor_ADC * 3.3) / 4095.0;
lcd.setCursor(16,0);
lcd.print(Valor_ADC);
lcd.print(" ");
}