#define BLYNK_TEMPLATE_ID "TMPL66MCkG4Oi" // Mendefinisikan ID template Blynk
#define BLYNK_TEMPLATE_NAME "Uas" // Mendefinisikan nama Template Blynk
#include <WiFi.h> // Mengimpor Pustaka Wifi
#include <BlynkSimpleEsp32.h> // Mengimpor pustaka Blynk untuk ESP32
const char* ssid = "Hallo"; // SSID jaringan Wifi
const char* password = "12345678"; // Kata Sandi Jaringan Wifi
const char* auth = "_O5rkstO6evORDi8ueudDcJeSFAWOFE1"; // Token Otentikasi Blynk
const byte trigPin = 19; // Pin untuk sensor ultrasonik (trig)
const byte echoPin = 18; // Pin untuk senosr ultrasonik (echo)
const int pinMerah = 14; // Pin Untuk LED merah
const int pinKuning = 12; // Pin Untuk LED Kuning
const int buzzerPin = 21; // Pin Untuk Buzzer
const int batasJarakDekat = 3; // Batas Jarak dekat dalam cm
const int batasJarakSedang = 4; // Batas Jarak sedang dalam cm
long duration; // durasi yang diterima oleh sensor ultrasonik
long distance; // jarak yang dihitung dari durasi pulse
long previousDistance = -1; // jarak sebelumnya
bool systemActive = false;
void setup() {
Serial.begin(115200);
Serial.println("Starting Blynk...");
connectWiFi();
Blynk.begin(auth, ssid, password);
initIO();
Serial.println("Setup complete.");
}
void loop() {
Blynk.run();
if (systemActive) {
measureDistance();
handleDistance();
}
delay(1000);
}
void connectWiFi() {
Serial.print("Connecting to WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
}
void initIO() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(pinMerah, OUTPUT);
pinMode(pinKuning, OUTPUT);
pinMode(buzzerPin, OUTPUT);
Serial.println("IO pins initialized");
}
void measureDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration * 0.0343) / 2;
if (distance != previousDistance) {
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" CM");
previousDistance = distance;
Blynk.virtualWrite(V1, distance);
}
}
void handleDistance() {
if (distance < batasJarakDekat) {
digitalWrite(pinMerah, HIGH);
digitalWrite(pinKuning, LOW);
tone(buzzerPin, 1000);
Serial.println("Banyune wis Kebak!!!");
Blynk.virtualWrite(V0, "Banyune wis Kebak!!!");
delay(500);
digitalWrite(pinMerah, LOW);
noTone(buzzerPin);
delay(500);
} else if (distance >= batasJarakDekat && distance <= batasJarakSedang) {
digitalWrite(pinMerah, LOW);
digitalWrite(pinKuning, HIGH);
Serial.println("Awas banyu ne meh Kebak!!");
Blynk.virtualWrite(V0, "Awas banyu ne meh Kebak!!");
} else {
digitalWrite(pinMerah, LOW);
digitalWrite(pinKuning, LOW);
Blynk.virtualWrite(V0, "Banyu aman");
}
}
BLYNK_WRITE(V2) {
int buttonState = param.asInt();
if (buttonState == 1) {
systemActive = true;
Serial.println("Sistem Aktif");
} else {
systemActive = false;
Serial.println("Sistem Tidak Aktif");
digitalWrite(pinMerah, LOW);
digitalWrite(pinKuning, LOW);
noTone(buzzerPin);
}
}