#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHT_PIN 4
#define DHT_TYPE DHT22
DHT dht(DHT_PIN, DHT_TYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define RED1 2
#define RED2 0
#define ORG1 32
#define ORG2 33
#define GRN1 25
#define GRN2 26
unsigned long lastUpdate = 0;
void setup() {
Serial.begin(115200);
dht.begin();
lcd.init();
lcd.backlight();
pinMode(RED1, OUTPUT);
pinMode(RED2, OUTPUT);
pinMode(ORG1, OUTPUT);
pinMode(ORG2, OUTPUT);
pinMode(GRN1, OUTPUT);
pinMode(GRN2, OUTPUT);
lcd.setCursor(0, 0);
lcd.print("Weather Station");
lcd.setCursor(0, 1);
lcd.print("Initializing...");
delay(2000);
lcd.clear();
}
void loop() {
if (millis() - lastUpdate < 5000) return;
lastUpdate = millis();
float hum = dht.readHumidity();
float temp = dht.readTemperature();
digitalWrite(RED1, LOW); digitalWrite(RED2, LOW);
digitalWrite(ORG1, LOW); digitalWrite(ORG2, LOW);
digitalWrite(GRN1, LOW); digitalWrite(GRN2, LOW);
lcd.setCursor(0, 0);
lcd.print("T:"); lcd.print(temp, 1); lcd.print("C ");
lcd.print("H:"); lcd.print(hum, 1); lcd.print("% ");
lcd.setCursor(0, 1);
if (hum > 60 && temp > 22) {
digitalWrite(RED1, HIGH); digitalWrite(RED2, HIGH);
lcd.print("Low ");
} else if (hum < 20 && temp < 18) {
digitalWrite(ORG1, HIGH); digitalWrite(ORG2, HIGH);
lcd.print("High ");
} else {
digitalWrite(GRN1, HIGH); digitalWrite(GRN2, HIGH);
lcd.print("Standard ");
}
Serial.print("Temp: "); Serial.print(temp); Serial.print(" C | ");
Serial.print("Humidity: "); Serial.print(hum); Serial.println(" %");
}