#define BLYNK_TEMPLATE_ID "TMPL6xNeNW6IX"
#define BLYNK_TEMPLATE_NAME "buzzer"
#define BLYNK_AUTH_TOKEN "4j9YLt8o5GmPxJ8PuHRvynk0vErm0Nns"
#define BLYNK_PRINT Serial

#include <WiFi.h>
#include <WiFiClient.h>
#include <ArduinoJson.h>
#include <BlynkSimpleEsp32.h>
#include "CTBot.h";

#define Echo 15
#define Trig 2
#define Merah 14
#define Kuning 12
#define Hijau 13
#define buzzer 26

String token="5995634931:AAFD93YkGRenIXGwDpHBeV1nJ27Rjkeiwds";
const int bot_id = 6061312392;

char auth[]= BLYNK_AUTH_TOKEN;
char ssid[]= "Wokwi-GUEST";
char pass[]="";

CTBot mybot;
BlynkTimer timer;

float jarak = 0;
int nada;

void ukur_jarak(){
  digitalWrite(Trig, LOW);
  delay(10);
  digitalWrite(Trig, HIGH);
  delay(10);
  digitalWrite(Trig, LOW);

  int duration = pulseIn(Echo,HIGH);
  jarak= duration*0.034/2+1;

  Serial.print("jarak: ");
  Serial.print(jarak);
  Serial.println(" cm");
  
}

void output_jarak(){
  if(jarak > 400){
    Serial.println("Aman");
    digitalWrite(Hijau, HIGH);
  }
  else if(jarak > 200 && jarak < 400){
    Serial.println("Hama mendekat!");
    digitalWrite(Kuning, HIGH);
  }
  else if(jarak < 200){
    Serial.println("Ada hama");
    digitalWrite(Merah, HIGH);
  }
}

void pesan(){
  TBMessage msg;

  if(jarak < 200){
    tone(buzzer,nada);
    mybot.sendMessage(bot_id,"Ada Hama Kurang dari 2 meter!");
    if(mybot.getNewMessage(msg)){
      Serial.println("pesan masuk: "+ msg.text);
      String pesan=msg.text;
      if(pesan == "on"){
        mybot.sendMessage(bot_id,"Alarm Dinyalakan");
      }
      if(pesan == "off"){
        noTone(buzzer);
        mybot.sendMessage(bot_id,"Alarm Dimatikan");
      }
    }
  }
  else{
    noTone(buzzer);
  }
}

BLYNK_WRITE(V4){
  nada=param.asInt();
}

void kirim_blynk(){
  Blynk.virtualWrite(V0,jarak);
  if(jarak > 400){
    Blynk.virtualWrite(V1,1);
    Blynk.virtualWrite(V2,0);
    Blynk.virtualWrite(V3,0);
  }
  else if(jarak >= 200 && jarak <= 400){
    Blynk.virtualWrite(V1,0);
    Blynk.virtualWrite(V2,1);
    Blynk.virtualWrite(V3,0);
  }
  else if(jarak < 200){
    Blynk.virtualWrite(V1,0);
    Blynk.virtualWrite(V2,0);
    Blynk.virtualWrite(V3,1);
  }
  Blynk.virtualWrite(V4, nada);
}

void setup() {
  Serial.begin(115200);
  Blynk.begin(auth,ssid,pass);
  pinMode(Trig, OUTPUT);
  pinMode(Echo, INPUT);
  pinMode(Merah, OUTPUT);
  pinMode(Hijau, OUTPUT);
  pinMode(buzzer, OUTPUT);
  timer.setInterval(2000L,kirim_blynk);
 
  Serial.println("Memulai Telegram Bot");
  mybot.wifiConnect(ssid,pass);
  mybot.setTelegramToken(token);

  if(mybot.testConnection()){
    Serial.println("koneksi berhasil");
  }
  else{
    Serial.println("koneksi Gagal");
  }
}

void loop() {
  digitalWrite(Merah, LOW);
  digitalWrite(Kuning, LOW);
  digitalWrite(Hijau, LOW);

  ukur_jarak();

  output_jarak();

  pesan();

  Blynk.run();
  timer.run();
  delay(1000); // this speeds up the simulation
}
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
bz1:1
bz1:2
ultrasonic1:VCC
ultrasonic1:TRIG
ultrasonic1:ECHO
ultrasonic1:GND
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2