#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 15
#define DHTTYPE DHT22
#define RED_LED 16
#define BLUE_LED 17
const int TEMP_THRESHOLD = 35; // Temperature threshold in °C
const int HUMIDITY_THRESHOLD = 70; // Humidity threshold in %
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 columns, 2 rows
void setup() {
Serial.begin(115200);
dht.begin();
lcd.init();
lcd.backlight();
// Initialize LED pins as outputs
pinMode(RED_LED, OUTPUT);
pinMode(BLUE_LED, OUTPUT);
digitalWrite(RED_LED, LOW);
digitalWrite(BLUE_LED, LOW);
lcd.setCursor(0, 0);
lcd.print("Starting...");
delay(2000);
lcd.clear();
}
void loop() {
// Read sensor data
float temp = dht.readTemperature();
float hum = dht.readHumidity();
// Check for valid readings
if (isnan(temp) || isnan(hum)) {
Serial.println("Sensor read failed");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor Error");
digitalWrite(RED_LED, LOW);
digitalWrite(BLUE_LED, LOW);
} else {
// Update LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temp, 1);
lcd.print((char)223); // Degree symbol
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Hum: ");
lcd.print(hum, 1);
lcd.print("%");
// Control LEDs
if (temp > TEMP_THRESHOLD) {
digitalWrite(RED_LED, HIGH); // Turn on red LED for overheating
} else {
digitalWrite(RED_LED, LOW);
}
if (hum > HUMIDITY_THRESHOLD) {
digitalWrite(BLUE_LED, HIGH); // Turn on blue LED for high humidity
} else {
digitalWrite(BLUE_LED, LOW);
}
Serial.print("Temp: ");
Serial.print(temp, 1);
Serial.print("C, Hum: ");
Serial.print(hum, 1);
Serial.println("%");
}
delay(3000); // Update every 3 seconds
}