#include <LiquidCrystal.h>
#include "DHT.h"
#define DHT_PIN A1
#define DHT_TYPE DHT22
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
DHT dht(DHT_PIN, DHT_TYPE);
const int echoPin = 4;
const int trigPin = 5;
const int greenLED = 2;
const int yellowLED = 3;
const int redLED = 6;
const int buzzer = 7;
void setup() {
Serial.begin(115200);
lcd.begin(16, 2);
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
pinMode(greenLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(redLED, OUTPUT);
pinMode(buzzer, OUTPUT);
dht.begin();
digitalWrite(greenLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(redLED, LOW);
digitalWrite(buzzer, LOW);
lcd.setCursor(0, 0);
lcd.print("Flood Detection");
lcd.setCursor(0, 1);
lcd.print("Initializing...");
delay(3000);
lcd.clear();
}
void loop() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
lcd.print("Sensor Error");
return;
}
long duration, distance, levelPercent;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration * 0.034) / 2;
levelPercent = map(distance, 15, 2, 0, 100);
if(levelPercent < 0) levelPercent = 0;
if(levelPercent > 100) levelPercent = 100;
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.print(temperature);
lcd.setCursor(0, 1);
lcd.print("Humidity:");
lcd.print(humidity);
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Water Level:");
lcd.print(levelPercent);
lcd.print("%");
if (distance <= 4) {
lcd.setCursor(0, 1);
lcd.print("Critical Alert! ");
digitalWrite(redLED, HIGH);
digitalWrite(greenLED, LOW);
digitalWrite(yellowLED, LOW);
tone(buzzer, 1000, 1500);
delay(2000);
}
else if (distance <= 12) {
lcd.setCursor(0, 1);
lcd.print("Caution! ");
digitalWrite(yellowLED, HIGH);
digitalWrite(redLED, LOW);
digitalWrite(greenLED, LOW);
tone(buzzer, 800, 1000);
delay(3000);
}
else {
lcd.setCursor(0, 1);
lcd.print("All Safe! ");
digitalWrite(greenLED, HIGH);
digitalWrite(yellowLED, LOW);
digitalWrite(redLED, LOW);
noTone(buzzer);
}
delay(2000);
}