#include <DHT.h>

#define pinDatos 18      // GPIO4 = D2 en D1 Mini, D4 en ESP32
#define pinPulsador 4    // Pulsador on
#define pinPulsador2 5   // Pulsador off
#define pinLed 2         // LED on
#define pinLed2 15       // LED off
#define trigPin 13       // Pin del HC-SR04 - Trigger
#define echoPin 12       // Pin del HC-SR04 - Echo

DHT sensorTH(pinDatos, DHT22); // Crea objeto sensorTH

void setup() {
  Serial.begin(115200);
  Serial.println("<3 <3 BIENVENIDO <3 <3");

  sensorTH.begin(); // Inicializa pines del sensor
  pinMode(pinPulsador, INPUT);
  pinMode(pinPulsador2, INPUT);
  pinMode(pinLed, OUTPUT);
  pinMode(pinLed2, OUTPUT);

  // Inicializa el HC-SR04
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  // Leer el estado de los pulsadores
  int pulsadorState = digitalRead(pinPulsador);
  int pulsador2State = digitalRead(pinPulsador2);

  // Encender el LED correspondiente al pulsador presionado
  if (pulsadorState == HIGH) {
    digitalWrite(pinLed, HIGH);
    digitalWrite(pinLed2, LOW);
    delay(2000); // Delay para evitar lecturas repetidas
    float humedad = sensorTH.readHumidity();
    float temperatura = sensorTH.readTemperature();
    Serial.print("Sistema iniciado <3");
    Serial.print("Temperatura = ");
    Serial.print(temperatura);
    Serial.println(" ºC");
    Serial.print("Humedad = ");
    Serial.print(humedad);
    Serial.println(" %");
    
    // Llamada a función para medir distancia con el HC-SR04
    float distancia = medirDistancia();
    Serial.print("Distancia = ");
    Serial.print(distancia);
    Serial.println(" cm");
  } else if (pulsador2State == HIGH) {
    Serial.print("Sistema apagado <3 ");
    digitalWrite(pinLed2, HIGH);
    digitalWrite(pinLed, LOW);
  } else {
    // Si ninguno de los pulsadores está presionado, apagar ambos LED
    digitalWrite(pinLed, LOW);
    digitalWrite(pinLed2, LOW);
  }
}

float medirDistancia() {
  // Generar un pulso corto en el pin Trigger del HC-SR04
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  // Leer el tiempo que tarda en llegar el eco
  long tiempoEcho = pulseIn(echoPin, HIGH);
  
  // Calcular la distancia en centímetros
  float distancia = tiempoEcho / 58.2;
  
  return distancia;
}
$abcdeabcde151015202530fghijfghij
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
led1:A
led1:C
r1:1
r1:2
r2:1
r2:2
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
led2:A
led2:C
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
r3:1
r3:2
r4:1
r4:2
dht1:VCC
dht1:SDA
dht1:NC
dht1:GND
r5:1
r5:2
ultrasonic1:VCC
ultrasonic1:TRIG
ultrasonic1:ECHO
ultrasonic1:GND