#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// LCD setup (20x4 with I2C)
LiquidCrystal_I2C lcd(0x27, 20, 4); // Change address if needed (0x27 or 0x3F)
// DHT22 setup
#define DHTPIN 19
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Relay pins
#define RELAY1_PIN 13
#define RELAY2_PIN 12
// Variables
float temperature = 0;
float humidity = 0;
bool relay1State = false;
bool relay2State = false;
void setup() {
Serial.begin(115200);
// Initialize LCD
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Initializing...");
// Initialize DHT sensor
dht.begin();
// Initialize relays
pinMode(RELAY1_PIN, OUTPUT);
pinMode(RELAY2_PIN, OUTPUT);
digitalWrite(RELAY1_PIN, HIGH); // Assuming HIGH is OFF (change if needed)
digitalWrite(RELAY2_PIN, HIGH); // Assuming HIGH is OFF (change if needed)
delay(2000); // Give sensors time to initialize
}
void loop() {
// Read temperature and humidity
temperature = dht.readTemperature();
humidity = dht.readHumidity();
// Check if readings failed
if (isnan(temperature) || isnan(humidity)) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("DHT22 Error!");
delay(2000);
return;
}
// Control relay1 based on temperature
if (temperature > 60) {
digitalWrite(RELAY1_PIN, LOW); // ON
relay1State = true;
} else if (temperature < 60) {
digitalWrite(RELAY1_PIN, HIGH); // OFF
relay1State = false;
}
// Control relay2 based on humidity
if (humidity < 60) {
digitalWrite(RELAY2_PIN, LOW); // ON
relay2State = true;
} else if (humidity > 60) {
digitalWrite(RELAY2_PIN, HIGH); // OFF
relay2State = false;
}
// Update LCD display
lcd.clear();
// Line 1: Temperature and Humidity
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature, 1);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(humidity, 1);
lcd.print("%");
// Line 3: Relay 1 status
lcd.setCursor(0, 2);
lcd.print("Relay1: ");
lcd.print(relay1State ? "ON " : "OFF");
lcd.print(" (Temp>60)");
// Line 4: Relay 2 status
lcd.setCursor(0, 3);
lcd.print("Relay2: ");
lcd.print(relay2State ? "ON " : "OFF");
lcd.print(" (Hum<60)");
// Add some delay between readings
delay(2000);
}