#define BLYNK_TEMPLATE_ID "TMPL60L_QiVkB"
#define BLYNK_TEMPLATE_NAME "Ketinggian Air"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#define ECHO_PIN 2
#define TRIG_PIN 3
#define buzzer 4
#define merah 13
#define kuning 12
#define hijau 11
char auth[] = "r346WtzZ16js-6ulTWvaZRSYdFSGXfui";
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
LiquidCrystal_I2C lcd(0x27, 20, 4);
//Inisialisasi
void setup() {
Wire.begin(20, 21);
pinMode(merah, OUTPUT);
pinMode(kuning, OUTPUT);
pinMode(hijau, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(buzzer, OUTPUT);
Serial.begin(9600);
lcd.init();
lcd.backlight();
digitalWrite(merah, HIGH);
digitalWrite(kuning, HIGH);
digitalWrite(hijau, HIGH);
// Judul
tone(4, 300, 500);
lcd.setCursor(3, 1);
lcd.print("Alat Mengukur");
lcd.setCursor(3, 2);
lcd.print("Ketinggian Air");
delay(2000);
// Nama Kelompok
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kelompok 3");
lcd.setCursor(0, 1);
lcd.print("Suryadi");
lcd.setCursor(0, 2);
lcd.print("Ichwan");
lcd.setCursor(0, 3);
lcd.print("Asmawiah Usman");
delay(2000);
digitalWrite(merah, LOW);
digitalWrite(kuning, LOW);
digitalWrite(hijau, LOW);
digitalWrite(buzzer, LOW);
lcd.clear();
Serial.print("Connecting to WiFi...");
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected!");
Blynk.begin(auth, ssid, pass);
Serial.print("Connecting to Blynk...");
while (!Blynk.connected()) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to Blynk!");
}
// Perhitungan Kedalaman
float kedalaman() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int durasi = pulseIn(ECHO_PIN, HIGH);
return 400 - durasi * 0.034 / 2;
}
// Proses Kondisi
void loop() {
Blynk.run();
float jarak = kedalaman();
Serial.print("Jarak: ");
Serial.println(jarak);
Blynk.virtualWrite(V1, jarak); // Mengirim data jarak ke Blynk di V1
Serial.print("Mengirim jarak ke Blynk: ");
Serial.println(jarak);
String status;
if (jarak > 370) {
digitalWrite(merah, HIGH);
digitalWrite(kuning, LOW);
digitalWrite(hijau, LOW);
//lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Kedalaman :");
lcd.setCursor(11, 1);
lcd.print(jarak);
lcd.setCursor(18, 1);
lcd.print("cm");
lcd.setCursor(0, 2);
lcd.print("Status :");
lcd.setCursor(11, 2);
lcd.print("Bahaya");
tone(4, 800, 1000);
delay(1000);
lcd.clear();
Blynk.virtualWrite(V2, 255); // Menghidupkan LED merah di Blynk
Blynk.virtualWrite(V3, 0); // Mematikan LED kuning di Blynk
Blynk.virtualWrite(V4, 0); // Mematikan LED hijau di Blynk
status = "Bahaya";
} else if (jarak >= 320 && jarak < 370) {
digitalWrite(merah, LOW);
digitalWrite(kuning, HIGH);
digitalWrite(hijau, LOW);
//lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Kedalaman :");
lcd.setCursor(11, 1);
lcd.print(jarak);
lcd.setCursor(18, 1);
lcd.print("cm");
lcd.setCursor(0, 2);
lcd.print("Status :");
lcd.setCursor(11, 2);
lcd.print("Siaga");
delay(1000);
lcd.clear();
Blynk.virtualWrite(V2, 0); // Mematikan LED merah di Blynk
Blynk.virtualWrite(V3, 255); // Menghidupkan LED kuning di Blynk
Blynk.virtualWrite(V4, 0); // Mematikan LED hijau di Blynk
status = "Siaga";
} else {
digitalWrite(merah, LOW);
digitalWrite(kuning, LOW);
digitalWrite(hijau, HIGH);
//lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Kedalaman :");
lcd.setCursor(11, 1);
lcd.print(jarak);
lcd.setCursor(18, 1);
lcd.print("cm");
lcd.setCursor(0, 2);
lcd.print("Status :");
lcd.setCursor(11, 2);
lcd.print("Aman");
delay(1000);
lcd.clear();
Blynk.virtualWrite(V2, 0); // Mematikan LED merah di Blynk
Blynk.virtualWrite(V3, 0); // Mematikan LED kuning di Blynk
Blynk.virtualWrite(V4, 255); // Menghidupkan LED hijau di Blynk
status = "Aman";
}
Blynk.virtualWrite(V5, status); // Mengirim status ke Blynk di V5
Serial.print("Mengirim status ke Blynk: ");
Serial.println(status);
}