#include <DHT.h>
// Pin Definitions
#define DHTPIN 14 // DHT22 data pin
#define DHTTYPE DHT22 // DHT sensor type
#define RED_PIN 15 // RGB LED - Red
#define GREEN_PIN 16 // RGB LED - Green
#define BLUE_PIN 17 // RGB LED - Blue
#define BUZZER_PIN 18 // Buzzer
#define SLIDE_RIGHT_PIN 4 // Slide switch (Right)
#define SLIDE_LEFT_PIN 5 // Slide switch (Left)
const int HUMIDITY_THRESHOLD = 80; // Buzzer alert threshold
volatile bool sleepMode = false; // Sleep mode status
DHT dht(DHTPIN, DHTTYPE);
// Interrupt Functions
void IRAM_ATTR rightSwitchInterrupt() {
sleepMode = false;
setRGBColor(0, 255, 255); // Cyan
}
void IRAM_ATTR leftSwitchInterrupt() {
sleepMode = true;
setRGBColor(0, 0, 0); // Black (OFF)
}
void setup() {
Serial.begin(115200);
dht.begin();
// Pin Setup
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(SLIDE_RIGHT_PIN, INPUT_PULLUP);
pinMode(SLIDE_LEFT_PIN, INPUT_PULLUP);
// Attach interrupts to the slide switch
attachInterrupt(digitalPinToInterrupt(SLIDE_RIGHT_PIN), rightSwitchInterrupt, FALLING);
attachInterrupt(digitalPinToInterrupt(SLIDE_LEFT_PIN), leftSwitchInterrupt, FALLING);
Serial.println("System Initialized...");
}
void loop() {
if (sleepMode) {
Serial.println("System in Sleep Mode...");
delay(1000);
return;
}
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor.");
return;
}
// Display Data on Serial Monitor
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C | Humidity: ");
Serial.print(humidity);
Serial.println(" %");
// Update RGB LED based on Humidity
updateRGBLED(humidity);
// Trigger Buzzer if humidity is high
if (humidity >= HUMIDITY_THRESHOLD) {
tone(BUZZER_PIN, 1000);
delay(500);
noTone(BUZZER_PIN);
}
delay(2000);
}
// Function to Set RGB LED Color
void setRGBColor(int red, int green, int blue) {
analogWrite(RED_PIN, red);
analogWrite(GREEN_PIN, green);
analogWrite(BLUE_PIN, blue);
}
// Function to Update RGB LED Based on Humidity Levels
void updateRGBLED(float humidity) {
if (humidity >= 30 && humidity < 40) {
setRGBColor(255, 255, 255); // White
} else if (humidity >= 40 && humidity < 50) {
setRGBColor(0, 0, 255); // Blue
} else if (humidity >= 50 && humidity < 60) {
setRGBColor(0, 255, 0); // Green
} else if (humidity >= 60 && humidity < 70) {
setRGBColor(255, 255, 0); // Yellow
} else if (humidity >= 70 && humidity < 80) {
setRGBColor(255, 165, 0); // Orange
} else if (humidity >= 80 && humidity < 90) {
setRGBColor(255, 0, 0); // Red
} else if (humidity >= 90) {
setRGBColor(128, 0, 128); // Purple
}
}