#include <Arduino.h>
#include "DHT.h"
#include <LiquidCrystal_I2C.h>
#define DHTPIN 4 // Pin donde conectamos DATA del DHT22
#define DHTTYPE DHT22 // Tipo de sensor
DHT dht(DHTPIN, DHTTYPE);
//const int LED1 = 23; // LED en GPIO23
const int BTN_CONT_MODOS = 13; // Botón subir brillo (a GND)
int CONTADOR_MODOS =0;
const int POTENC = 32;
const int LED = 16;
const int maximo = 2000;
const int minimo = 0;
int brillo = 0; // 0..255
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(115200);
//pinMode(LED1, OUTPUT);
pinMode(POTENC,INPUT);
pinMode(LED,OUTPUT);
//DHT
Serial.begin(115200);
dht.begin();
// ldc
lcd.init(); // inicializar LCD
lcd.backlight(); // prender luz de fondo
lcd.setCursor(0,0);
// Botones con pull-up interno: LOW cuando se presionan (a GND)
pinMode(BTN_CONT_MODOS, INPUT_PULLUP);
//analogWrite(LED1, brillo); // valor inicial (core ESP32 2.x en Wokwi)
Serial.println("Wokwi: BTN_UP=GPIO13, BTN_DN=GPIO4. LED=GPIO23");
}
void loop() {
//static uint32_t lastStep = 0;
//uint32_t now = millis();
bool upPressed = (digitalRead(BTN_CONT_MODOS) == LOW);
if (upPressed) {
CONTADOR_MODOS++;
if (CONTADOR_MODOS == 5){
CONTADOR_MODOS = 0;
}
/*
brillo = min(maximo, brillo + 5);
analogWrite(LED1, brillo);
lastStep = now;
Serial.printf("UP -> brillo=%d\n", brillo);*/
}
switch (CONTADOR_MODOS){
case 1:
Serial.printf("CASO 1");
medirHumTem();
delay(100);
break;
case 2:
Serial.printf("CASO 2 ");
ajustarLed();
delay(100);
break;
}
/*
if (dnPressed && (now - lastStep > 150)) {
brillo = max(minimo, brillo - 5);
analogWrite(LED1, brillo);
lastStep = now;
Serial.printf("DOWN -> brillo=%d\n", brillo);
}
*/
delay(10);
}
//Ajustar el brillo del LED integrado usando el potenciómetro
void ajustarLed(){
int estadoPote = analogRead(POTENC); // leer el valor del pote (0..4095 en ESP32)
int brillo = map(estadoPote, 0, 4095, 0, 255); // escalar a PWM (0..255)
analogWrite(LED, brillo); // ajustar LED
Serial.printf("Pote=%d -> Brillo=%d\n", estadoPote, brillo);
}
void medirHumTem(){
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Error leyendo el DHT22!");
return;
}
// Mostrar en LCD
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temp: ");
lcd.print(t);
lcd.print(" C");
lcd.setCursor(0,1);
lcd.print("Hum: ");
lcd.print(h);
lcd.print(" %");
delay(2000); // cada 2 segundos
}