//Incluir libreria DTH.h
#include "DHT.h"
#define DTHPIN 2  //registra datos del sensor DTH22
#define DHTTYPE DHT22 // Tipo de sensor utilizado DHT22

//Definicion de variables
#define TEMPERATURA_MAXIMA 45   // Temperatura máxima > 45°C se activa alarma
#define HUMEDAD_MINIMA 25       // Humedad mínima >= 25% se activa alarma
#define HUMEDAD_MAXIMA 60       // Humedad máxiuma <= 60% se activa alarma
#define LED_TEMPERATURA 14      // LED para temperatura 
#define LED_HUMEDAD 15          // LED para humedad
#define BOTON_BLANCO 26               // Pin conectado al boton blanco
#define BOTON_NEGRO 27               // Pin conectado al boton negro

//Inicializa el sensor DHT22
DHT dht(DTHPIN, DHTTYPE);

void setup() {
  pinMode(LED_TEMPERATURA, OUTPUT);
  pinMode(LED_HUMEDAD, OUTPUT);
  pinMode(BOTON_BLANCO, INPUT_PULLUP);
  pinMode(BOTON_NEGRO, INPUT_PULLUP);
  dht.begin();
  Serial.begin(9600);}

void loop() {
	float temperatura = dht.readTemperature(); // Registra valores de temperatura
  float humedad = dht.readHumidity();       // Registra valores de humedad
  delay(1000);
  if (temperatura > TEMPERATURA_MAXIMA) {
    digitalWrite(LED_TEMPERATURA, HIGH); // Enciende el LED rojo de alerta de temperatura
    Serial.print("Temperatura elevada: " + String(temperatura) + " °C");
    Serial.println("    ");
    } else {
    digitalWrite(LED_TEMPERATURA, LOW); // Apaga el LED rojo de alerta de temperatura
    Serial.print("Temperatura normal: " + String(temperatura) + " °C");
    Serial.println("    ");
  }
  if (humedad < HUMEDAD_MINIMA || humedad > HUMEDAD_MAXIMA) {
    digitalWrite(LED_HUMEDAD, HIGH); // Enciende el LED celeste de alerta de humedad
    Serial.println("Humedad fuera de rango: " + String(humedad, 1) + " %");
    Serial.println("    ");
  } else {
    digitalWrite(LED_HUMEDAD, LOW); // Apaga el LED celeste de alerta de humedad
    Serial.println("Humedad adecuada: " + String(humedad, 1) + " %");
    Serial.println("    ");
  }

  // Al presionar un boton se apagan LED con un delay de 2 segundos
  if (digitalRead(BOTON_BLANCO) == LOW || digitalRead(BOTON_NEGRO) == LOW) {
    digitalWrite(LED_TEMPERATURA, LOW);
    digitalWrite(LED_HUMEDAD, LOW);
    delay(2000);
  }
}