#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <Servo.h>
#define DHTPIN 2
#define DHTTYPE DHT22
#define LDR_PIN A0
#define SERVO_PIN 9
#define BUZZER_PIN 10
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo myServo;
void setup() {
Serial.begin(9600);
dht.begin();
lcd.init();
lcd.backlight();
myServo.attach(SERVO_PIN);
pinMode(BUZZER_PIN, OUTPUT);
digitalWrite(BUZZER_PIN, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("System Initializing");
delay(2000);
lcd.clear();
}
void loop() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
int ldrValue = analogRead(LDR_PIN);
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("DHT Error");
delay(2000);
return;
}
Serial.print("Temp: ");
Serial.print(temperature);
Serial.print("C Humidity: ");
Serial.print(humidity);
Serial.print("% LDR: ");
Serial.println(ldrValue);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("T:");
lcd.print(temperature,1);
lcd.print("C H:");
lcd.print(humidity,0);
lcd.print("%");
lcd.setCursor(0,1);
lcd.print("Light:");
lcd.print(ldrValue);
if (temperature > 25.0) {
myServo.write(90);
} else {
myServo.write(0);
}
if (humidity > 70) {
digitalWrite(BUZZER_PIN, HIGH);
delay(500);
digitalWrite(BUZZER_PIN, LOW);
}
delay(2000);
}