#include <DHT11.h>

#define DHT_PIN 33   // DHT11 sensor connected to digital pin 33
#define RELAY1_PIN 16 // Relay 1 connected to digital pin 16
#define RELAY2_PIN 17 // Relay 2 connected to digital pin 17
#define TEMPERATURE_THRESHOLD 24 // Temperature threshold to activate Relay 1
#define HUMIDITY_THRESHOLD 60    // Humidity threshold to activate Relay 2

DHT11 dht11(DHT_PIN);

void setup() {
  Serial.begin(9600);
  pinMode(RELAY1_PIN, OUTPUT);
  pinMode(RELAY2_PIN, OUTPUT);
}

void loop() {
  int temperature = dht11.readTemperature();
  int humidity = dht11.readHumidity();
 
  if (temperature != DHT11::ERROR_CHECKSUM && temperature != DHT11::ERROR_TIMEOUT &&
      humidity != DHT11::ERROR_CHECKSUM && humidity != DHT11::ERROR_TIMEOUT) {
    Serial.print("Temperature: ");
    Serial.print(temperature);
    Serial.print(" °C   Humidity: ");
    Serial.print(humidity);
    Serial.println(" %");

    // Check temperature threshold to activate Relay 1
    if (temperature >= TEMPERATURE_THRESHOLD) {
      digitalWrite(RELAY1_PIN, HIGH); // Activate Relay 1
    } else {
      digitalWrite(RELAY1_PIN, LOW);  // Deactivate Relay 1
    }

    // Check humidity threshold to activate Relay 2
    if (humidity > HUMIDITY_THRESHOLD) {
      digitalWrite(RELAY2_PIN, HIGH); // Activate Relay 2
    } else {
      digitalWrite(RELAY2_PIN, LOW);  // Deactivate Relay 2
    }
  } else {
    Serial.print("Sensor Reading Error - Temperature: ");
    Serial.print(DHT11::getErrorString(temperature));
    Serial.print(" Humidity: ");
    Serial.println(DHT11::getErrorString(humidity));
  }

  // Wait for 1 second before the next reading.
  delay(1000);
}