#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 2
#define DHTTYPE DHT22
#define TRIG_PIN 3
#define ECHO_PIN 4
#define LED_PIN 5
#define BUZZER_PIN 6
#define LDR_PIN A0
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LDR_PIN, INPUT);
Serial.begin(9600);
dht.begin();
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("KELOMPOK 1");
lcd.setCursor(0, 1);
lcd.print("DETEKSI BANJIR");
delay(1000);
for (int lcdPosition = 0; lcdPosition < 20; lcdPosition++) {
lcd.scrollDisplayLeft();
delay(300);
}
lcd.clear();
}
void loop() {
float suhu = dht.readTemperature();
float kelembapan = dht.readHumidity();
int ldrValue = analogRead(LDR_PIN);
bool mendung = ldrValue < 500;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
float jarak = duration * 0.034 / 2;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("S:");
lcd.print(suhu);
lcd.print("C H:");
lcd.print(kelembapan);
lcd.setCursor(0, 1);
lcd.print("J:");
lcd.print(jarak);
lcd.print("cm ");
lcd.print(mendung ? "MD" : "TR");
Serial.print("Suhu: "); Serial.print(suhu); Serial.print(" C, ");
Serial.print("Kelembapan: "); Serial.print(kelembapan); Serial.print(" %, ");
Serial.print("Jarak: "); Serial.print(jarak); Serial.print(" cm, ");
Serial.print("LDR: "); Serial.println(ldrValue);
if (jarak < 30 || suhu < 30 || mendung) {
digitalWrite(LED_PIN, HIGH);
tone(BUZZER_PIN, 1000);
} else {
digitalWrite(LED_PIN, LOW);
noTone(BUZZER_PIN);
}
delay(1000);
}