#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6nlPSmIvk"
#define BLYNK_TEMPLATE_NAME "Wokwi LED dan Servo"
#define BLYNK_AUTH_TOKEN "xExIoTluoptYwAiHqi923OUsSOBTVhKO"
#include <ESP32Servo.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
Servo servoMotor;
int pos = 0;
bool servoActivated = false;
bool ledBlinking = false;
char auth[] = BLYNK_AUTH_TOKEN;
const char *ssid = "Wokwi-GUEST";
const char *pass = "";
BlynkTimer timer;
void servoMovement() {
if (servoActivated) {
for (pos = 0; pos <= 180; pos += 1) {
servoMotor.write(pos);
delay(15);
}
for (pos = 180; pos >= 0; pos -= 1) {
servoMotor.write(pos);
delay(15);
}
}
}
void blinkLED() {
if (ledBlinking) {
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
}
BLYNK_WRITE(V1) {
int buttonState = param.asInt();
if (buttonState == HIGH) {
servoActivated = !servoActivated;
if (servoActivated) {
timer.enable(timer.getTimer(0)); // Start blinking LED
} else {
timer.disable(timer.getTimer(0)); // Stop blinking LED
digitalWrite(LED_BUILTIN, LOW); // Turn off LED
}
}
}
void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
servoMotor.attach(5); // Pin servo motor di sini disetel ke pin 5
Blynk.begin(auth, ssid, pass);
// Setup button on virtual pin 1
Blynk.virtualWrite(V1, LOW);
Blynk.virtualWrite(V1, "label", "Servo Control");
Blynk.virtualWrite(V1, "onLabel", "ON");
Blynk.virtualWrite(V1, "offLabel", "OFF");
// Set timer to blink LED every 30 seconds
timer.setInterval(30000L, blinkLED);
timer.setInterval(2000L, servoMovement); // Posisi servo akan diperbarui setiap 2 detik
}
void loop() {
Blynk.run();
timer.run();
}