#define BLYNK_TEMPLATE_ID "TMPL6nlPSmIvk"
#define BLYNK_TEMPLATE_NAME "Wokwi LED dan Servo"
#define BLYNK_AUTH_TOKEN "xExIoTluoptYwAiHqi923OUsSOBTVhKO"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <ESP32Servo.h>
char ssid[] = "Wokwi-GUEST";
char auth[] = BLYNK_AUTH_TOKEN;
char pass[] = "";
const int redLedPin = 12;
const int blueLedPin = 14;
const int servoPin1 = 13;
const int servoPin2 = 15;
Servo servo1;
Servo servo2;
bool isRunning = false; // Variable tracking untuk pergerakan LED dan Servo
void setup() {
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
pinMode(redLedPin, OUTPUT);
pinMode(blueLedPin, OUTPUT);
servo1.attach(servoPin1);
servo2.attach(servoPin2);
digitalWrite(redLedPin, LOW);
digitalWrite(blueLedPin, LOW);
}
void loop() {
Blynk.run();
}
// Servo and LED Tombol
BLYNK_WRITE(V2) {
if (param.asInt() == 1) {
if (!isRunning) { // Running Check buat komponen
isRunning = true; // aba-aba tombol sudah di trigger
unsigned long currentMillis = millis();
while (millis() - currentMillis < 30000) { // Continuity Pergerakan Selama 30 Detik
// Move both servos
for (int angle = 0; angle <= 180; angle++) {
servo1.write(angle);
servo2.write(angle);
if (angle % 180 == 0) { // perintah jika servo bergerak 0-180 derajat, maka LED menyala
digitalWrite(redLedPin, HIGH);
digitalWrite(blueLedPin, HIGH);
Blynk.virtualWrite(V3, HIGH);
Blynk.virtualWrite(V4, HIGH);
}
delay(10);
}
for (int angle = 180; angle >= 0; angle--) {
servo1.write(angle);
servo2.write(angle);
if (angle % 180 == 0) { // perintah jika servo bergerak kembali ke 0 derajat LED tetap mengiringi dalam keadaan menyala
digitalWrite(redLedPin, HIGH);
digitalWrite(blueLedPin, HIGH);
Blynk.virtualWrite(V3, HIGH);
Blynk.virtualWrite(V4, HIGH);
}
delay(10);
}
// Jeda mengedip LED seiring jeda berhentinya Servo
digitalWrite(redLedPin, LOW);
digitalWrite(blueLedPin, LOW);
Blynk.virtualWrite(V3, LOW);
Blynk.virtualWrite(V4, LOW);
delay(500);
}
isRunning = false; // Reset aba-aba kembali ke awal
}
}
}