#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#define BLYNK_AUTH_TOKEN "uw3NngWRRTD3RDMJio6pQK2FgHrGwk2k" // Enter your Blynk auth token
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST"; // Enter your WiFi name
char pass[] = ""; // Enter your WiFi password
// Define LED pins
const int led1Pin = 2;
const int led2Pin = 4;
const int led3Pin = 5;
// Blynk virtual pins
#define BUTTON_PIN V0
bool lampuMenyala = false;
int currentLED = led1Pin;
BLYNK_WRITE(BUTTON_PIN) {
  int buttonState = param.asInt();
  if (buttonState == HIGH) {
    // Jika lampu belum menyala, nyalakan
    if (!lampuMenyala) {
      lampuMenyala = true;
      currentLED = led1Pin;
      digitalWrite(currentLED, HIGH);
    } else { // Jika lampu sudah menyala, matikan semua
      lampuMenyala = false;
      digitalWrite(led1Pin, LOW);
      digitalWrite(led2Pin, LOW);
      digitalWrite(led3Pin, LOW);
    }
    delay(200); // Delay sementara untuk mencegah bouncing (goyangan) pada push button
  }
}
void setup() {
  // Initialize serial communication
  Serial.begin(115200);
  // Initialize the LED pins as outputs
  pinMode(led1Pin, OUTPUT);
  pinMode(led2Pin, OUTPUT);
  pinMode(led3Pin, OUTPUT);
  // Initialize Blynk
  Blynk.begin(auth, ssid, pass, "blynk.cloud", 80);
}
void loop() {
  // Jika lampu menyala, lakukan running effect
  if (lampuMenyala) {
    digitalWrite(currentLED, LOW); // Matikan LED saat ini
    // Pindah ke LED berikutnya
    if (currentLED == led1Pin) {
      currentLED = led2Pin;
    } else if (currentLED == led2Pin) {
      currentLED = led3Pin;
    } else {
      currentLED = led1Pin;
    }
    digitalWrite(currentLED, HIGH); // Nyalakan LED baru
    delay(500); // Delay antar pergantian LED
  }
  Blynk.run();
}