#define BLYNK_PRINT Serial

/* Fill in information from Blynk Device Info here */
#define BLYNK_TEMPLATE_ID "TMPL6edd9TpRP"
#define BLYNK_TEMPLATE_NAME "HTW COBA"
#define BLYNK_AUTH_TOKEN "xuL07hAvMvnfKZ-36jJreEua469T-pxf"

#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <BlynkSimpleEsp32.h>
#include <UniversalTelegramBot.h>

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "Wokwi-GUEST"; //nama hotspot yang digunakan
char pass[] = ""; //password hotspot yang digunakan

const int photoSwitch = 4;
int milidetik, detik, menit, jam;
int adaOrang = 0;
bool mulaiHitung = false;
long int timerMulai = 0;
bool enableKirim  = false;

// Telegram Bot Token
#define BOTtoken "6768524261:AAGR0I4XGhQs7wpWNB_xbjwrtBSBjGx4UuI"

// Chat ID or Username to send messages
String chatId = "1102957103";

// Inisialisasi objek Bot
WiFiClientSecure client; // Use WiFiClientSecure for secure connections

UniversalTelegramBot bot(BOTtoken, client);

void setup()
{
  pinMode(photoSwitch, INPUT_PULLUP);
  // Debug console
  Serial.begin(9600);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, pass);
  client.setCACert(TELEGRAM_CERTIFICATE_ROOT);

  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass); 
}

void loop()
{
  if (digitalRead(photoSwitch) == LOW && mulaiHitung == false)
  {
    adaOrang += 1;
    mulaiHitung = true;
    timerMulai = millis();
  }
  else if (digitalRead(photoSwitch) == HIGH && mulaiHitung == true)
  {
    sendToTelegram(adaOrang, detik, menit, jam); 
    // adaOrang = 0;
    mulaiHitung = false; 
     
  }

  if (mulaiHitung == true)
  {
    milidetik = millis() - timerMulai;
    if (milidetik > 1000)
    {
      milidetik = 0;
      detik += 1;
      if (detik > 60)
      {
        detik = 0;
        menit += 1;
        if (menit > 60)
        {
          jam += 1;
          menit = 0;
        }
      }
    }
  }
  else
  { 
    milidetik = 0;
    detik = 0;
    menit = 0;
    jam = 0;
    
  }
 
  String message = "Deteksi Orang: " + String(adaOrang) +
                   " Waktu: " + String(jam) + " jam " +
                   String(menit) + " menit " + String(detik) + " detik";

  Serial.println(message);

  Blynk.virtualWrite(V0, adaOrang);
  Blynk.virtualWrite(V1, detik);
  Blynk.virtualWrite(V2, menit);
  Blynk.virtualWrite(V3, jam);
  Blynk.run();

  
}

void sendToTelegram(int adaOrang, int detik, int menit, int jam)
{
  Serial.println("Kirim ke Telegram: ");
  String message = "Deteksi Orang: " + String(adaOrang) +
                   "\nWaktu: " + String(jam) + " jam " +
                   String(menit) + " menit " + String(detik) + " detik";

  Serial.println(message);

  bot.sendMessage(chatId, message, "");
  // bot.sendMessage(chatId, "Test sKirim Pesan" , "");

  // Kirim pesan ke Telegram
  // bot.sendSimpleMessage(chatId, message, "Markdown"); // Assuming you want to use Markdown parse mode
  // bot.sendSimpleMessage(chatId, message, "Markdown"); // Assuming you want to use Markdown parse mode
}
esp:0
esp:2
esp:4
esp:5
esp:12
esp:13
esp:14
esp:15
esp:16
esp:17
esp:18
esp:19
esp:21
esp:22
esp:23
esp:25
esp:26
esp:27
esp:32
esp:33
esp:34
esp:35
esp:3V3
esp:EN
esp:VP
esp:VN
esp:GND.1
esp:D2
esp:D3
esp:CMD
esp:5V
esp:GND.2
esp:TX
esp:RX
esp:GND.3
esp:D1
esp:D0
esp:CLK
sw1:1
sw1:2
sw1:3