#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo servoMotor;
// const int pin_ledBiru = 33;
#define pin_ledBiru 33
#define pin_ledHijau 25
#define pin_ledKuning 26
#define pin_ledMerah 27
#define trigPin 17
#define echoPin 16
#define servo_pin 15
#define relay 13
const char* ssid = "Wokwi-GUEST";
const char* password = "";
#define BOTtoken "6264632343:AAFw1Zkql9X7nvHQkn70N9wLUoUkPqSxkhU"
#define CHAT_ID "1469037432"
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
lcd.init();
lcd.backlight();
//Setup Awal Ketika Running
lcd.setCursor(2,0);
lcd.print("MONITORING");
lcd.setCursor(2,1);
lcd.print("DEBIT AIR");
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(relay, OUTPUT);
// pinMode(pin_buzz1, OUTPUT);
servoMotor.attach(servo_pin);
servoMotor.write(servo_pin);
servoMotor.write(0);
// SETUP LED
pinMode(pin_ledBiru, OUTPUT);
pinMode(pin_ledHijau, OUTPUT);
pinMode(pin_ledKuning, OUTPUT);
pinMode(pin_ledMerah, OUTPUT);
delay(4000);
}
void loop()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
int durasi = pulseIn(echoPin, HIGH);
int jarak = durasi * 0.034 / 2;
tampilkanPesanLCD(jarak);
indikator(jarak);
Serial.println(jarak);
// put your main code here, to run repeatedly:
delay(10); // this speeds up the simulation
}
void indikator(float jarak) {
// fungsi yang mengontrol LED, buzzer, dan servo berdasarkan jarak yang diukur
if (jarak > 200) {
digitalWrite(pin_ledBiru, HIGH);
digitalWrite(pin_ledHijau, LOW);
digitalWrite(pin_ledKuning, LOW);
digitalWrite(pin_ledMerah, LOW);
digitalWrite(relay, LOW);
}
else if (jarak > 100) {
digitalWrite(pin_ledBiru, HIGH);
digitalWrite(pin_ledHijau, HIGH);
digitalWrite(pin_ledKuning, LOW);
digitalWrite(pin_ledMerah, LOW);
digitalWrite(relay, LOW);
}
else if (jarak > 50) {
digitalWrite(pin_ledBiru, HIGH);
digitalWrite(pin_ledHijau, HIGH);
digitalWrite(pin_ledKuning, HIGH);
digitalWrite(pin_ledMerah, LOW);
digitalWrite(relay, LOW);
bot.sendMessage(CHAT_ID, "debit sungai Status Siaga");
}
else if (jarak <= 50) {
digitalWrite(pin_ledBiru, HIGH);
digitalWrite(pin_ledHijau, HIGH);
digitalWrite(pin_ledKuning, HIGH);
digitalWrite(pin_ledMerah, HIGH);
digitalWrite(relay, HIGH);
bot.sendMessage(CHAT_ID, "debit sungai Status Bahaya");
}
}
void tampilkanPesanLCD(int jarak) {
lcd.clear(); // membersihkan layar LCD
lcd.setCursor(0, 0); // mengatur posisi kursor layar LCD di baris 0, kolom 0
lcd.print("Jarak: ");
lcd.print(jarak);
lcd.print(" cm"); // mencetak nilai jarak diikuti oleh " cm" di layar LCD
// mencetak pesan lcd
if (jarak>200){
servoMotor.write(0);
lcd.setCursor(0, 1);
lcd.print("Status Normal");
}
else if (jarak > 100){
servoMotor.write(0);
lcd.setCursor(0, 1);
lcd.print("Status Waspada");
}
else if (jarak > 50){
servoMotor.write(45);
lcd.setCursor(0, 1);
lcd.print("Status Siaga");
}
else if (jarak <= 50){
servoMotor.write(90);
lcd.setCursor(0, 1);
lcd.print("Status Bahaya");
}
delay(1000); // Tampilkan pesan selama 1 detik
}