#include <LiquidCrystal_I2C.h>
#define TRIG1_PIN 2
#define ECHO1_PIN 3
#define TRIG2_PIN 4
#define ECHO2_PIN 5
#define TRIG_RAIN_PIN 6
#define ECHO_RAIN_PIN 7
#define RED_LED_PIN 8
#define YELLOW_LED_PIN 9
#define GREEN_LED_PIN 10
#define BLUE_LED_PIN 11
#define WHITE_LED_PIN 12
#define BUZZER_PIN 13
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(9600);
pinMode(TRIG1_PIN, OUTPUT);
pinMode(ECHO1_PIN, INPUT);
pinMode(TRIG2_PIN, OUTPUT);
pinMode(ECHO2_PIN, INPUT);
pinMode(TRIG_RAIN_PIN, OUTPUT);
pinMode(ECHO_RAIN_PIN, INPUT);
pinMode(RED_LED_PIN, OUTPUT);
pinMode(YELLOW_LED_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
pinMode(BLUE_LED_PIN, OUTPUT);
pinMode(WHITE_LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
lcd.begin(16, 2);
}
void loop() {
long duration1, duration2, distance1, distance2, duration_rain, distance_rain;
digitalWrite(TRIG1_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG1_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG1_PIN, LOW);
duration1 = pulseIn(ECHO1_PIN, HIGH);
distance1 = duration1 * 0.034 / 2;
digitalWrite(TRIG2_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG2_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG2_PIN, LOW);
duration2 = pulseIn(ECHO2_PIN, HIGH);
distance2 = duration2 * 0.034 / 2;
digitalWrite(TRIG_RAIN_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_RAIN_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_RAIN_PIN, LOW);
duration_rain = pulseIn(ECHO_RAIN_PIN, HIGH);
distance_rain = duration_rain * 0.034 / 2;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Banjir: ");
if (distance1 < 100 || distance2 < 100) {
lcd.print("Ya");
digitalWrite(WHITE_LED_PIN, HIGH);
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(YELLOW_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, LOW);
digitalWrite(BLUE_LED_PIN, LOW);
tone(BUZZER_PIN, 1000);
delay(500);
noTone(BUZZER_PIN);
} else {
lcd.print("Tidak");
digitalWrite(WHITE_LED_PIN, LOW);
// Logika untuk pendeteksi hujan
if (distance_rain < 100) {
lcd.setCursor(0, 1);
lcd.print("Hujan: Deras ");
digitalWrite(RED_LED_PIN, HIGH);
digitalWrite(YELLOW_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, LOW);
digitalWrite(BLUE_LED_PIN, LOW);
} else if (distance_rain < 200) {
lcd.setCursor(0, 1);
lcd.print("Hujan: Sedang ");
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(YELLOW_LED_PIN, HIGH);
digitalWrite(GREEN_LED_PIN, LOW);
digitalWrite(BLUE_LED_PIN, LOW);
} else if (distance_rain < 300) {
lcd.setCursor(0, 1);
lcd.print("Hujan: Kecil ");
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(YELLOW_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, HIGH);
digitalWrite(BLUE_LED_PIN, LOW);
} else {
lcd.setCursor(0, 1);
lcd.print("Tidak Hujan ");
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(YELLOW_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, LOW);
digitalWrite(BLUE_LED_PIN, HIGH);
}
noTone(BUZZER_PIN);
}
delay(1000);
}