//Tiga parameter di bawah ini biasanya ada saat kita membuat template baru
#define BLYNK_TEMPLATE_ID "TMPL6lw50zfp7" //Tulis nama template ID Blynk
#define BLYNK_TEMPLATE_NAME "Monitor V I" //Tulis nama template Blynk
#define BLYNK_AUTH_TOKEN "5nhHVqfA8wBGoklZyzDxYnQwBajqDN6K" //Tulis token Blynk 

#define BLYNK_PRINT Serial //Kita menggunakan Blynk serial

#include <WiFi.h> //Library WiFi
#include <WiFiClient.h> //Library WiFiClient
#include <BlynkSimpleEsp32.h> //Library BlynkESP32

char ssid[] = "Wokwi-GUEST"; //Nama WiFi yang digunakan
char pass[] = ""; //Password WiFi yang digunakan

BlynkTimer timer; //Untuk push data dibutuhkan blynk timer (untuk code push data dapat dilihat di blynk example)

const int potensiometerPin = 34; // Pin ADC untuk membaca potensiometer
const int led = 5;           // Pin PWM untuk mengendalikan LED

void setup() {
  pinMode(led, OUTPUT);

  Serial.begin(115200); //Menginisiasi serial monitor

  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass); //Menginisiasi Blynk

  timer.setInterval(1000L, myTimerEvent); //Mengirim data tiap satu detik

}

void myTimerEvent()
{
    // Membaca nilai tegangan dari potensiometer (0-4095)
  int nilaiTegangan = analogRead(potensiometerPin);

  // Menghitung duty cycle PWM berdasarkan nilai tegangan (0-255)
  int dutyCycle = map(nilaiTegangan, 0, 4095, 0, 23.9);

  // Mengatur kecerahan LED menggunakan PWM
  //analogWrite(led, dutyCycle);

  delay(10); // Delay kecil untuk menghindari fluktuasi yang cepat
  Serial.print("Tegangan: ");
  Serial.print(dutyCycle);
  Serial.println(" V ");

  Blynk.virtualWrite(V0,dutyCycle); //Mengirim data V0 di Blynk
  
}

BLYNK_WRITE(V2) //V2, sesuai dengan pin Blynk yang ingin dipakai
{
  int pinValue = param.asInt();
  Serial.print("V2 Switch value is: ");
  Serial.println(pinValue);
  digitalWrite(led, pinValue);
}

void loop()
{
  Blynk.run(); //Menjalankan Bylnk
  timer.run(); //Menjalankan timer
}