#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 2 // Pin where your DHT sensor is connected.
#define DHTTYPE DHT22 // Type of DHT sensor.
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht(DHTPIN, DHTTYPE);
int ledY = 3;
int ledO = 4;
int ledDG = 5;
int ledP = 6;
int ledR = 7;
void setup() {
Wire.begin(); // Initialize the I2C communication for the LCD
dht.begin();
lcd.init(); // Initialize the LCD
lcd.backlight(); // Turn on the backlight
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Initializing...");
pinMode(ledY, OUTPUT);
pinMode(ledO, OUTPUT);
pinMode(ledDG, OUTPUT);
pinMode(ledP, OUTPUT);
pinMode(ledR, OUTPUT);
}
void loop() {
delay(5000); // Delay for 2 seconds to prevent rapid readings
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Failed to read data from DHT sensor!");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor Error");
return;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature, 1); // Display temperature with one decimal place
lcd.print(" ");
lcd.write(0xDF); // Display the degree symbol
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(humidity, 1); // Display humidity with one decimal place
lcd.print(" %");
delay(5000);
// Control LED based on temperature and humidity
if (temperature <= 0) {
digitalWrite(ledY, HIGH);
delay(1000);
digitalWrite(ledY, LOW);
} else if (temperature <= 16) {
digitalWrite(ledO, HIGH);
delay(1000);
digitalWrite(ledO, LOW);
} else if (temperature <= 25) {
digitalWrite(ledDG, HIGH);
delay(1000);
digitalWrite(ledDG, LOW);
} else if (temperature <= 37) {
digitalWrite(ledP, HIGH);
delay(1000);
digitalWrite(ledP, LOW);
} else {
digitalWrite(ledR, HIGH);
delay(1000);
digitalWrite(ledR, LOW);
}
delay(2000); // Adjust the delay based on your preference
}