#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHTesp.h>
//LUNA SAFI CHEKH ZEN
// constants won't change
const int buttonPin = 25; // pulsador
const int LEDPin = 26; // LED
// variables will change
int ledState = LOW;
int lastButtonState;
int currentButtonState;
// VARIABLES EXTRA PARA REALIZAR LOS EJERCICIOS
// 1. parpadeo LED
unsigned long previousMillis = 0;
const long interval = 1000;
// 2. temporizador
unsigned long startMillis;
// 2. LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // si no funciona, prueba 0x3F
// 4. contador de pulsaciones
int pressCount = 0;
// 5. sensor temperatura
const int dhtPin = 15;
DHTesp dht;
// 6. sensor extra (LDR)
const int ldrPin = 34;
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(LEDPin, OUTPUT);
currentButtonState = digitalRead(buttonPin);
// 2. LCD inicialización
lcd.init();
lcd.backlight();
// 5. sensor temperatura
dht.setup(dhtPin, DHTesp::DHT22);
// 2. iniciar temporizador
startMillis = millis();
}
void loop() {
// 3. PULSADOR → encender/apagar LED
lastButtonState = currentButtonState;
currentButtonState = digitalRead(buttonPin);
if (lastButtonState == HIGH && currentButtonState == LOW) {
Serial.println("Boton pulsado");
ledState = !ledState;
pressCount++;
// Si se desactiva, el LED queda apagado fijo
if (ledState == LOW) {
digitalWrite(LEDPin, LOW);
}
}
// 1. LED parpadeo cada segundo
if (ledState == HIGH) {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
digitalWrite(LEDPin, !digitalRead(LEDPin));
}
}
// 2. TEMPORIZADOR en LCD
unsigned long tiempo = (millis() - startMillis) / 1000;
lcd.setCursor(0, 0);
lcd.print("Tiempo: ");
lcd.print(tiempo);
lcd.print("s ");
// 4. MOSTRAR PULSACIONES
lcd.setCursor(0, 1); //es como un salto de linea
lcd.print("Pulsos: ");
lcd.print(pressCount);
lcd.print(" ");
// 5. SENSOR TEMPERATURA
TempAndHumidity data = dht.getTempAndHumidity();
Serial.print("Temp: ");
Serial.println(data.temperature);
// 6. SENSOR EXTRA (LDR)
//La LDR mide la luz y muestra si está claro u oscuro por serie
int luz = analogRead(ldrPin);
Serial.print("Luz: ");
Serial.println(luz);
delay(200);
}