#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>
#include <time.h>
// Ganti dengan kredensial WiFi Anda
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Token bot Telegram
const char* BOTtoken = "7023646564:AAF-We22MUvzjTztVDukjc7PH_TW-fBDyI0";
// ID chat Telegram
const char* CHAT_ID = "2109828419"; // Ganti dengan chat ID Anda
// Objek bot Telegram
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
// Pin definisi
#define TRIG_PIN 12
#define ECHO_PIN 13
#define BUZZER_PIN 15
#define RED_PIN 14
#define GREEN_PIN 27
#define BLUE_PIN 26
long duration;
int distance;
unsigned long waktu_terakhir = 0; // variabel untuk menyimpan waktu terakhir cek pesan
const unsigned long interval = 1000; // interval cek pesan (dalam milidetik)
void setup() {
Serial.begin(115200);
// Menghubungkan ke WiFi
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Sedang menghubungkan ke WiFi..");
}
Serial.println("Terhubung ke WiFi");
// Menampilkan alamat IP
Serial.println(WiFi.localIP());
// Mengatur waktu
Serial.print("Atur Waktu: ");
configTime(0, 0, "pool.ntp.org");
time_t now = time(nullptr);
while (now < 24 * 3600) {
Serial.print(".");
delay(100);
now = time(nullptr);
}
Serial.println(now);
// Setup pin
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
// Mematikan buzzer dan LED RGB saat startup
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(RED_PIN, HIGH); // Matikan LED anoda umum (HIGH)
digitalWrite(GREEN_PIN, HIGH); // Matikan LED anoda umum (HIGH)
digitalWrite(BLUE_PIN, HIGH); // Matikan LED anoda umum (HIGH)
}
void loop() {
cek_pesan(); // Cek pesan terbaru
// Mengirim sinyal ultrasonik
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Menghitung durasi sinyal
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.034 / 2;
// Memeriksa apakah ada objek yang terdeteksi
if (distance >= 200 || distance <= 0) {
// Tidak ada objek yang terdeteksi
Serial.println("No object detected");
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(RED_PIN, HIGH); // Matikan LED anoda umum (HIGH)
digitalWrite(GREEN_PIN, HIGH); // Matikan LED anoda umum (HIGH)
digitalWrite(BLUE_PIN, HIGH); // Matikan LED anoda umum (HIGH)
} else {
// Objek terdeteksi
Serial.print("Distance: ");
Serial.println(distance);
if (distance <= 10) {
// Objek sangat dekat
digitalWrite(BUZZER_PIN, HIGH);
digitalWrite(RED_PIN, LOW); // Nyalakan LED merah (LOW)
digitalWrite(GREEN_PIN, HIGH); // Matikan LED hijau (HIGH)
digitalWrite(BLUE_PIN, HIGH); // Matikan LED biru (HIGH)
bot.sendMessage(CHAT_ID, "Peringatan: Objek sangat dekat dengan Mobil Anda!", "");
} else if (distance <= 40) {
// Objek cukup dekat
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(RED_PIN, LOW); // Nyalakan LED merah (LOW)
digitalWrite(GREEN_PIN, HIGH); // Matikan LED hijau (HIGH)
digitalWrite(BLUE_PIN, HIGH); // Matikan LED biru (HIGH)
} else {
// Objek jauh
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(RED_PIN, HIGH); // Matikan LED anoda umum (HIGH)
digitalWrite(GREEN_PIN, HIGH); // Matikan LED anoda umum (HIGH)
digitalWrite(BLUE_PIN, HIGH); // Matikan LED anoda umum (HIGH)
}
}
delay(5000); // Menunggu 5 detik sebelum mengukur lagi
}
// Cek Pesan Terbaru
void cek_pesan() {
if (millis() > waktu_terakhir + interval) {
int banyakPesan = bot.getUpdates(bot.last_message_received + 1);
while (banyakPesan) {
Serial.println("got response");
handleNewMessages(banyakPesan);
banyakPesan = bot.getUpdates(bot.last_message_received + 1);
}
waktu_terakhir = millis();
}
}
// Memproses pesan yang diterima
void handleNewMessages(int numNewMessages) {
for (int i = 0; i < numNewMessages; i++) {
// Cek Chat ID
String chat_id = String(bot.messages[i].chat_id);
Serial.println(chat_id);
if (chat_id != CHAT_ID) {
bot.sendMessage(chat_id, "Unauthorized user", "");
continue;
}
// Menangani Pesan
String text = bot.messages[i].text;
if (text == "/buzzer") {
digitalWrite(BUZZER_PIN, HIGH); // Aktifkan Buzzer
delay(1000); // Buzzer berbunyi selama 1 detik
digitalWrite(BUZZER_PIN, LOW); // Matikan Buzzer
bot.sendMessage(CHAT_ID, "Buzzer activated", "");
}
}
}