#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);
if (temperature <= 0) {
lcd.setCursor(0, 0);
lcd.print("Temp: Freezing ");
} else if (temperature <= 16) {
lcd.setCursor(0, 0);
lcd.print("Temp: Very Cold ");
} else if (temperature <= 25) {
lcd.setCursor(0, 0);
lcd.print("Temp: Normal ");
} else if (temperature <= 37) {
lcd.setCursor(0, 0);
lcd.print("Temp: Hot ");
} else {
lcd.setCursor(0, 0);
lcd.print("Temp: Very Hot ");
}
if (humidity <= 20) {
lcd.setCursor(0, 1);
lcd.print("Humidity: Dry ");
} else if (humidity <= 40) {
lcd.setCursor(0, 1);
lcd.print("Humidity: Normal ");
} else if (humidity <= 60) {
lcd.setCursor(0, 1);
lcd.print("Humidity: Comfort");
} else {
lcd.setCursor(0, 1);
lcd.print("Humidity: Humid ");
}
delay(2000); // Adjust the delay based on your preference
}