#include <DHT.h>
#define DHTPIN 4 // Pin where the DHT11 is connected to the ESP32
#define DHTTYPE DHT11 // Type of DHT sensor used
#define LED_COUNT 4 // Number of LEDs connected
#define LED_START_PIN 13 // Starting pin for LEDs
DHT dht(DHTPIN, DHTTYPE);
const int ledPins[LED_COUNT] = {LED_START_PIN, LED_START_PIN + 1, LED_START_PIN + 2, LED_START_PIN + 3}; // Pins for 4 LEDs
int patternIndex = 0; // Index for the current lighting pattern
unsigned long patternStartTime = 0; // Variable to track the start time of the pattern
unsigned long offTime = 0; // Variable to track the LED off time
void setup() {
Serial.begin(9600);
dht.begin();
for (int i = 0; i < LED_COUNT; ++i) {
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW); // Ensure all LEDs are initially turned off
}
}
void loop() {
unsigned long currentMillis = millis();
if (patternStartTime == 0) {
patternStartTime = currentMillis;
}
unsigned long patternDuration = 5000; // Pattern duration: 5 seconds
unsigned long offDuration = 3000; // LED off duration: 3 seconds
// Execute pattern for 5 seconds
if (currentMillis - patternStartTime < patternDuration) {
executePattern();
} else {
// Turn off LEDs for 3 seconds after pattern execution
if (offTime == 0) {
turnOffAll();
offTime = currentMillis;
}
if (currentMillis - offTime >= offDuration) {
// Reset variables for the next pattern
patternIndex = (patternIndex + 1) % 4; // Change to the next pattern
patternStartTime = 0;
offTime = 0;
Serial.print("Pattern: ");
Serial.println(patternIndex);
}
}
readSensorData(); // Read sensor data and print
}
void executePattern() {
switch (patternIndex) {
case 0:
allOn();
break;
case 1:
alternate();
break;
case 2:
blink();
break;
case 3:
sequence();
break;
}
}
void readSensorData() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (!isnan(humidity) && !isnan(temperature)) {
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
} else {
Serial.println("Failed to read from DHT sensor!");
}
delay(2000);
}
// Functions for LED patterns (allOn, alternate, blink, sequence) remain the same as before.
void allOn() {
for (int i = 0; i < LED_COUNT; ++i) {
digitalWrite(ledPins[i], HIGH);
}
}
void alternate() {
for (int i = 0; i < LED_COUNT; i += 2) {
digitalWrite(ledPins[i], HIGH);
delay(100);
digitalWrite(ledPins[i], LOW);
delay(100);
}
}
void blink() {
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < LED_COUNT; ++j) {
digitalWrite(ledPins[j], HIGH);
}
delay(300);
for (int j = 0; j < LED_COUNT; ++j) {
digitalWrite(ledPins[j], LOW);
}
delay(300);
}
}
void sequence() {
for (int i = 0; i < LED_COUNT; ++i) {
digitalWrite(ledPins[i], HIGH);
delay(300);
digitalWrite(ledPins[i], LOW);
}
}
void turnOffAll() {
for (int i = 0; i < LED_COUNT; ++i) {
digitalWrite(ledPins[i], LOW);
}
}