#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>
#define BOTtoken "7559058108:AAFdfU3pQJyLBQl1FvpuIGmVm34ANVsq_pA" // Ganti dengan token Bot Anda
#define CHAT_ID "6956225665" // Ganti dengan chat_id Anda
const char* ssid = "Wokwi-GUEST";
const char* password = ""; // Wokwi tidak memerlukan password
const int trigPin = 15; // Pin trigger sensor ultrasonik
const int echoPin = 2; // Pin echo sensor ultrasonik
const int ledPin1 = 17; // Pin LED 1
const int ledPin2 = 5; // Pin LED 2
const int ledPin3 = 18; // Pin LED 3
const int ledPin4 = 19; // Pin LED 4
const int buzzerPin = 22; // Pin buzzer
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
unsigned long waktu_terakhir = 0;
int interval = 1000; // Cek pesan setiap 1 detik
bool sirenActive = false;
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(buzzerPin, OUTPUT);
// Matikan semua LED dan buzzer saat inisialisasi
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(buzzerPin, LOW);
// Hubungkan ke Wi-Fi
WiFi.begin(ssid, password);
client.setInsecure(); // Gunakan setInsecure() agar bisa bypass SSL
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Menghubungkan ke WiFi...");
}
Serial.println("Terhubung ke WiFi");
}
void loop() {
if (millis() > waktu_terakhir + interval) {
int numMessages = bot.getUpdates(bot.last_message_received + 1);
while (numMessages) {
handleNewMessages(numMessages);
numMessages = bot.getUpdates(bot.last_message_received + 1);
}
waktu_terakhir = millis();
}
// Baca jarak dan kontrol LED & buzzer
long distance = getDistance();
Serial.print("Jarak: ");
Serial.print(distance);
Serial.println(" cm");
// Logika kontrol berdasarkan jarak
if (distance > 300) {
activateLED(4);
if (sirenActive) {
ambulanceSiren(); // Sirine ambulans jika diaktifkan
}
} else if (distance > 200) {
activateLED(3);
} else if (distance > 100) {
activateLED(2);
} else if (distance > 50) {
activateLED(1);
} else {
activateLED(0);
}
delay(500);
}
// Fungsi untuk mendapatkan jarak dari sensor ultrasonik
long getDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
long distance = duration * 0.034 / 2;
return distance;
}
// Fungsi untuk mengaktifkan LED berdasarkan jumlah yang diaktifkan
void activateLED(int numLEDs) {
digitalWrite(ledPin1, numLEDs >= 1 ? HIGH : LOW);
digitalWrite(ledPin2, numLEDs >= 2 ? HIGH : LOW);
digitalWrite(ledPin3, numLEDs >= 3 ? HIGH : LOW);
digitalWrite(ledPin4, numLEDs >= 4 ? HIGH : LOW);
}
// Fungsi untuk membuat suara sirine seperti ambulans
void ambulanceSiren() {
for (int i = 1000; i <= 2000; i += 50) {
tone(buzzerPin, i); // Naik frekuensi dari 1000 Hz ke 2000 Hz
delay(10);
}
for (int i = 2000; i >= 1000; i -= 50) {
tone(buzzerPin, i); // Turun frekuensi dari 2000 Hz ke 1000 Hz
delay(10);
}
}
// Fungsi untuk menangani pesan baru dari Telegram
void handleNewMessages(int numNewMessages) {
for (int i = 0; i < numNewMessages; i++) {
String chat_id = String(bot.messages[i].chat_id);
String text = bot.messages[i].text;
String from_name = bot.messages[i].from_name;
if (chat_id != CHAT_ID) {
bot.sendMessage(chat_id, "Unauthorized user", "");
continue;
}
if (text == "/start") {
String welcome = "Halo, " + from_name + ".\n";
welcome += "Perintah:\n";
welcome += "/status - Lihat jarak sensor\n";
welcome += "/led_on - Nyalakan semua LED\n";
welcome += "/led_off - Matikan semua LED\n";
welcome += "/siren_on - Nyalakan sirine ambulans\n";
welcome += "/siren_off - Matikan sirine ambulans\n";
bot.sendMessage(chat_id, welcome, "");
}
if (text == "/status") {
long distance = getDistance();
String status = "Jarak: " + String(distance) + " cm";
bot.sendMessage(chat_id, status, "");
}
if (text == "/led_on") {
activateLED(4);
bot.sendMessage(chat_id, "Semua LED dinyalakan", "");
}
if (text == "/led_off") {
activateLED(0);
bot.sendMessage(chat_id, "Semua LED dimatikan", "");
}
if (text == "/siren_on") {
sirenActive = true;
bot.sendMessage(chat_id, "Sirine ambulans dinyalakan", "");
}
if (text == "/siren_off") {
sirenActive = false;
noTone(buzzerPin); // Matikan suara buzzer
bot.sendMessage(chat_id, "Sirine ambulans dimatikan", "");
}
}
}