// Id, Name, dan Token untuk terhubung ke BLYNK
#define BLYNK_TEMPLATE_ID "TMPL6_qU_sbm8"
#define BLYNK_TEMPLATE_NAME "DETEKTOR BANJIR BLYNK"
#define BLYNK_AUTH_TOKEN "DG-5RopN7vR8CrZ4oJ63Wq5lA2PrRoCq"
#define BLYNK_PRINT Serial
// Import library
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#define trigPin1 12 // Pin trigger sensor ultrasonik
#define echoPin1 14 // Pin echo sensor ultrasonik
#define servoPin 15 // Pin servo
// Pin led untuk indikator JARAK
#define ledRed 25
#define ledYellow 26
#define ledGreen 27
// Pin assignments for LEDs on Blynk app
#define ledRedPin V1
#define ledYellowPin V2
#define ledGreenPin V3
char auth[] = BLYNK_AUTH_TOKEN; // Auth Token
char ssid[] = "Wokwi-GUEST"; // Nama hotspot yang digunakan
char pass[] = ""; // Password hotspot yang digunakan
Servo servo;
long duration1, distance1;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void sendSensorDataToBlynk(long distance1)
{
Blynk.virtualWrite(V0, distance1); // Virtual pin V0
}
void updateBlynkLeds(long distance1)
{
if (distance1 <= 100)
{
Blynk.virtualWrite(ledRedPin, HIGH);
Blynk.virtualWrite(ledYellowPin, LOW);
Blynk.virtualWrite(ledGreenPin, LOW);
}
else if (distance1 > 100 && distance1 < 200)
{
Blynk.virtualWrite(ledRedPin, LOW);
Blynk.virtualWrite(ledYellowPin, HIGH);
Blynk.virtualWrite(ledGreenPin, LOW);
}
else if (distance1 >= 200)
{
Blynk.virtualWrite(ledRedPin, LOW);
Blynk.virtualWrite(ledYellowPin, LOW);
Blynk.virtualWrite(ledGreenPin, HIGH);
}
else
{
Blynk.virtualWrite(ledRedPin, LOW);
Blynk.virtualWrite(ledYellowPin, LOW);
Blynk.virtualWrite(ledGreenPin, LOW);
}
}
void setup()
{
Serial.begin(9600);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(ledRed, OUTPUT);
pinMode(ledYellow, OUTPUT);
pinMode(ledGreen, OUTPUT);
servo.attach(servoPin);
// Inisialisasi LCD
lcd.begin(16, 2);
Blynk.begin(auth, ssid, pass);
}
void updateLCD(long distance1)
{
lcd.clear();
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Nyalakan backlight
lcd.setCursor(0, 0);
lcd.print("Jarak: ");
lcd.print(distance1);
lcd.print(" cm");
}
BLYNK_WRITE(V4)
{
int value = param.asInt();
if (value == 1 && distance1 > 100 && distance1 < 200)
{
servo.write(180); // Buka SERVO
digitalWrite(ledRed, LOW);
digitalWrite(ledYellow, HIGH);
digitalWrite(ledGreen, LOW);
delay(1000);
}
else if (value == 0 && distance1 > 100 && distance1 < 200)
{
servo.write(90); // Tutup SERVO
}
}
void loopAll()
{
digitalWrite(trigPin1, LOW);
delayMicroseconds(2);
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
distance1 = (duration1 / 2) * 0.0343;
Serial.print("Jarak dengan air: ");
Serial.print(distance1);
Serial.println(" cm");
Blynk.virtualWrite(V0, distance1);
if (distance1 <= 100)
{
digitalWrite(ledRed, HIGH);
digitalWrite(ledYellow, LOW);
digitalWrite(ledGreen, LOW);
servo.write(180);
delay(1000);
}
else if (distance1 > 100 && distance1 < 200)
{
digitalWrite(ledRed, LOW);
digitalWrite(ledYellow, HIGH);
digitalWrite(ledGreen, LOW);
delay(1000);
}
else if (distance1 >= 200)
{
digitalWrite(ledRed, LOW);
digitalWrite(ledYellow, LOW);
digitalWrite(ledGreen, HIGH);
servo.write(90);
delay(1000);
}
else
{
digitalWrite(ledRed, LOW);
digitalWrite(ledYellow, LOW);
digitalWrite(ledGreen, LOW);
}
updateBlynkLeds(distance1);
updateLCD(distance1);
delay(1000);
}
void loop()
{
Blynk.run();
loopAll();
}