#define BLYNK_TEMPLATE_ID "TMPL6iIdVKLAa"
#define BLYNK_TEMPLATE_NAME "Led Controller"
#define BLYNK_AUTH_TOKEN "RBbZzea0vIovW2al0B_5xQfoYkLdz3-F"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
int ledPins[10] = {23,22,21,19,18,5,17,16,4,2};
bool ledState[10] = {0};
// ===== Đếm LED =====
int countLedOn() {
int count = 0;
for (int i = 0; i < 10; i++) {
if (ledState[i]) count++;
}
return count;
}
// ===== Update =====
void updateLedCount() {
int count = countLedOn();
Blynk.virtualWrite(V20, count);
Serial.print("LED ON: ");
Serial.println(count);
}
// ===== CONTROL TỪNG LED =====
BLYNK_WRITE(V0){ int s=param.asInt(); digitalWrite(ledPins[0],s); ledState[0]=s; updateLedCount();}
BLYNK_WRITE(V1){ int s=param.asInt(); digitalWrite(ledPins[1],s); ledState[1]=s; updateLedCount();}
BLYNK_WRITE(V2){ int s=param.asInt(); digitalWrite(ledPins[2],s); ledState[2]=s; updateLedCount();}
BLYNK_WRITE(V3){ int s=param.asInt(); digitalWrite(ledPins[3],s); ledState[3]=s; updateLedCount();}
BLYNK_WRITE(V4){ int s=param.asInt(); digitalWrite(ledPins[4],s); ledState[4]=s; updateLedCount();}
BLYNK_WRITE(V5){ int s=param.asInt(); digitalWrite(ledPins[5],s); ledState[5]=s; updateLedCount();}
BLYNK_WRITE(V6){ int s=param.asInt(); digitalWrite(ledPins[6],s); ledState[6]=s; updateLedCount();}
BLYNK_WRITE(V7){ int s=param.asInt(); digitalWrite(ledPins[7],s); ledState[7]=s; updateLedCount();}
BLYNK_WRITE(V8){ int s=param.asInt(); digitalWrite(ledPins[8],s); ledState[8]=s; updateLedCount();}
BLYNK_WRITE(V9){ int s=param.asInt(); digitalWrite(ledPins[9],s); ledState[9]=s; updateLedCount();}
// ===== ALL LED =====
BLYNK_WRITE(V10){
int state = param.asInt();
for(int i=0;i<10;i++){
digitalWrite(ledPins[i], state);
ledState[i] = state;
Blynk.virtualWrite(i, state);
}
updateLedCount();
}
void setup() {
Serial.begin(115200);
for(int i=0;i<10;i++){
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW);
Blynk.virtualWrite(i, LOW);
}
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
Blynk.syncAll(); // đồng bộ trạng thái
}
void loop() {
Blynk.run();
}