#include <LiquidCrystal.h>
#include "DHTesp.h"
const int DHT_PIN = 2;
const int RED_PIN = 6;
const int GREEN_PIN = 5;
const int BLUE_PIN = 4;
DHTesp dhtSensor;
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
float previousTemp = 0.0;
float previousHumidity = 0.0;
void setup() {
//LCD Setup
lcd.begin(16, 2);
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
//RGB LED Setup
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
//Start with all LEDs off
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
}
void loop() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
//Check if a reading error exists
if (isnan(data.humidity)) {
Serial.println("Error reading humidity");
//Turn Blue LED on for error
setRGB(LOW, LOW, HIGH);
//Display error
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Error reading");
lcd.setCursor(0, 1);
lcd.print("sensor data");
} else {
// Output to the Serial Monitor
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
//Update LCD only if values have changed
if (data.temperature != previousTemp || data.humidity != previousHumidity) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: " + String(data.temperature, 2) + " C");
lcd.setCursor(0, 1);
lcd.print("Humidity: " + String(data.humidity, 1) + "%");
//Update previous values
previousTemp = data.temperature;
previousHumidity = data.humidity;
}
//Control RGB LED based on humidity
if (data.humidity >= 40 && data.humidity <= 60) {
//Turn on green when humidity is between 40% and 60%
setRGB(LOW, HIGH, LOW);
} else {
//Turn on red if humidity is outside the range
setRGB(HIGH, LOW, LOW);
}
}
delay(2000);
}
//Function to control the RGB LED
void setRGB(bool red, bool green, bool blue) {
digitalWrite(RED_PIN, red);
digitalWrite(GREEN_PIN, green);
digitalWrite(BLUE_PIN, blue);
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
dht1:VCC
dht1:SDA
dht1:NC
dht1:GND
lcd1:VSS
lcd1:VDD
lcd1:V0
lcd1:RS
lcd1:RW
lcd1:E
lcd1:D0
lcd1:D1
lcd1:D2
lcd1:D3
lcd1:D4
lcd1:D5
lcd1:D6
lcd1:D7
lcd1:A
lcd1:K
rgb1:R
rgb1:COM
rgb1:G
rgb1:B