#include <DHT.h>
// === Pin Definitions ===
#define DHTPIN 4
#define RED_PIN 12
#define GREEN_PIN 14
#define BLUE_PIN 27
#define BUZZER_PIN 26
#define SWITCH_PIN 22
// === DHT Sensor Settings ===
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// === Override Handling ===
volatile bool overrideTriggered = false;
volatile int overrideState = 0; // 1 = RIGHT (Cyan), -1 = LEFT (Pink)
unsigned long overrideStartTime = 0;
void IRAM_ATTR handleSwitchInterrupt(); // Forward declaration
// === Interrupt Handler ===
void IRAM_ATTR handleSwitchInterrupt() {
int state = digitalRead(SWITCH_PIN);
overrideTriggered = true;
overrideState = (state == HIGH) ? 1 : -1;
overrideStartTime = millis();
}
void setup() {
Serial.begin(115200);
dht.begin();
// RGB pins
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
// Buzzer
pinMode(BUZZER_PIN, OUTPUT);
// Slide switch with interrupt
pinMode(SWITCH_PIN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(SWITCH_PIN), handleSwitchInterrupt, CHANGE);
}
void loop() {
// === Handle 2-second manual override ===
if (overrideTriggered) {
unsigned long now = millis();
if (now - overrideStartTime <= 2000) {
if (overrideState == 1) {
setRGB(0, 255, 255); // Cyan
} else if (overrideState == -1) {
setRGB(128, 0 , 128); // Pink
}
return; // Skip rest of loop while override is active
} else {
overrideTriggered = false; // Time's up
}
}
// === Read Humidity ===
float humidity = dht.readHumidity();
if (isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %");
// === Set RGB LED Based on Humidity ===
if (humidity >= 30 && humidity < 40)
setRGB(255, 255, 255); // White
else if (humidity >= 40 && humidity < 50)
setRGB(0, 0, 255); // Blue
else if (humidity >= 50 && humidity < 60)
setRGB(0, 255, 0); // Green
else if (humidity >= 60 && humidity < 70)
setRGB(255, 255, 0); // Yellow
else if (humidity >= 70 && humidity < 80)
setRGB(255, 165, 0); // Orange
else if (humidity >= 80 && humidity < 90)
setRGB(255, 0, 0); // Red
else if (humidity >= 90)
setRGB(128, 0, 128); // Purple
else
setRGB(0, 0, 0); // Off for low humidity
// === Buzzer Alert ===
if (humidity > 80) {
tone(BUZZER_PIN, 1000, 500); // 1kHz tone for 0.5s
Serial.println("Warning! High humidity detected - Buzzer activated");
}
delay(2000);
}
// === RGB LED Color Function ===
void setRGB(uint8_t r, uint8_t g, uint8_t b) {
analogWrite(RED_PIN, r);
analogWrite(GREEN_PIN, g);
analogWrite(BLUE_PIN, b);
}
Loading
esp32-devkit-c-v4
esp32-devkit-c-v4