#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 2
#define DHTTYPE DHT22
#define LDRPIN A0
#define RED_LED 10
#define YELLOW_LED 9
#define BLUE_LED 8
#define BUZZER 7
#define LAMP_LED 6
#define GREEN_LED 4
#define LDR_THRESHOLD 500
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
void allOutputOff() {
digitalWrite(RED_LED, LOW);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(BLUE_LED, LOW);
digitalWrite(GREEN_LED, LOW);
digitalWrite(LAMP_LED, LOW);
noTone(BUZZER);
}
void setup() {
Serial.begin(9600);
dht.begin();
lcd.init();
lcd.backlight();
pinMode(RED_LED, OUTPUT);
pinMode(YELLOW_LED, OUTPUT);
pinMode(BLUE_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(LAMP_LED, OUTPUT);
pinMode(BUZZER, OUTPUT);
allOutputOff();
lcd.setCursor(0, 0);
lcd.print("Smart Room");
lcd.setCursor(0, 1);
lcd.print("System Ready");
delay(1000);
lcd.clear();
}
void loop() {
float temp = dht.readTemperature();
int ldrValue = analogRead(LDRPIN);
bool isDark = (ldrValue < LDR_THRESHOLD);
if (isnan(temp)) {
Serial.println("DHT Error");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor Error!");
delay(1000);
return;
}
allOutputOff();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print((int)temp);
lcd.print(" C");
Serial.print("Temp: ");
Serial.print(temp);
Serial.print(" C | LDR: ");
Serial.print(ldrValue);
Serial.print(" | ");
Serial.println(isDark ? "Dark" : "Bright");
if (isDark && temp < 30.0) {
digitalWrite(BLUE_LED, HIGH);
digitalWrite(LAMP_LED, HIGH);
lcd.setCursor(0, 1);
lcd.print("Dark|Comfort");
} else if (!isDark && temp < 30.0) {
digitalWrite(GREEN_LED, HIGH);
lcd.setCursor(0, 1);
lcd.print("Bright|Comfort");
} else if (isDark && temp >= 30.0) {
digitalWrite(RED_LED, HIGH);
digitalWrite(LAMP_LED, HIGH);
tone(BUZZER, 1000);
lcd.setCursor(0, 1);
lcd.print("Dark|Hot Warn");
} else if (!isDark && temp >= 30.0) {
digitalWrite(YELLOW_LED, HIGH);
tone(BUZZER, 1000);
lcd.setCursor(0, 1);
lcd.print("Bright|Hot Warn");
}
delay(1000);
}