#define BLYNK_TEMPLATE_ID "TMPL6Lk9nTTDz"
#define BLYNK_TEMPLATE_NAME "Sensor Parkir Mundur"
#define BLYNK_AUTH_TOKEN "7fAZ_3yvMkZo8jFp-2SUEMd7g6GDM2zX"
#include <WiFi.h>
#include <Wire.h>
#include <BlynkSimpleEsp32.h>
#include <LiquidCrystal_I2C.h>
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
const int pButton = 2;
const int pBuzzer = 4;
const int pTrig = 5;
const int pEcho = 18;
int buzz = 1000;
long jarak, waktu;
bool isMuted = false;
LiquidCrystal_I2C lcd(0x27, 16, 2);
BlynkTimer timer;
BLYNK_WRITE(V1) {
int tekan = param.asInt();
if (tekan == 1) {
isMuted = true;
} else {
isMuted = false;
}
}
void ukurJarak() {
digitalWrite(pTrig, LOW);
delayMicroseconds(2);
digitalWrite(pTrig, HIGH);
delayMicroseconds(10);
digitalWrite(pTrig, LOW);
waktu = pulseIn(pEcho, HIGH);
jarak = (waktu * 0.034) / 2;
lcd.setCursor(0, 0);
lcd.print("Jarak: ");
lcd.print(jarak);
lcd.print(" cm ");
Serial.print("Jarak: ");
Serial.print(jarak);
Blynk.virtualWrite(V0, jarak);
lcd.setCursor(0, 1);
if (jarak > 0 && jarak <= 15) {
// KONDISI BAHAYA
if (!isMuted && buzz > 0) {
tone(pBuzzer, buzz);
} else {
noTone(pBuzzer);
}
lcd.print("BAHAYA ");
Serial.println(" | Status: BAHAYA");
} else if (jarak > 15 && jarak <= 30) {
// KONDISI WASPADA
noTone(pBuzzer);
lcd.print("WASPADA ");
Serial.println(" | Status: WASPADA");
} else if (jarak > 30) {
// KONDISI AMAN
noTone(pBuzzer);
lcd.print("AMAN ");
Serial.println(" | Status: AMAN");
} else {
// Sensor tidak terbaca / Error
noTone(pBuzzer);
lcd.print("ERROR ");
Serial.println(" | Status: ERROR");
}
lcd.setCursor(10, 1);
if (isMuted) {
lcd.print("[MUTE]");
} else {
lcd.print(" ");
}
}
void setup() {
Serial.begin(115200);
Serial.println("ESP32 Sensor Parkir Ready!");
Wire.begin(21, 22);
lcd.init();
lcd.backlight();
pinMode(pButton, INPUT_PULLUP);
pinMode(pBuzzer, OUTPUT);
pinMode(pTrig, OUTPUT);
pinMode(pEcho, INPUT);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
timer.setInterval(500L, ukurJarak);
}
void loop() {
Blynk.run();
timer.run();
int x = digitalRead(pButton);
if (x == LOW) {
buzz = 100;
} else {
buzz = 1000;
}
}