#include <DHT.h>
#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6vjJzyLUe"
#define BLYNK_TEMPLATE_NAME "Project UTS IoT"
#define BLYNK_AUTH_TOKEN "m4ZBGBASfHYmQQzLGRMwigt2zB7kEXLz"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#define LED_PIN1 14
#define PIR_PIN 25
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
unsigned long motionStart = 0;
bool motionActive = false;
int motionCount = 0;
unsigned long blynkStartTime = 0;
bool blynkLampActive = false; // Kontrol manual dari Blynk
void setup() {
Serial.begin(115200);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
pinMode(PIR_PIN, INPUT);
pinMode(LED_PIN1, OUTPUT);
}
// Fungsi untuk menerima perintah dari tombol di Blynk
BLYNK_WRITE(V3) {
int lampStatus = param.asInt(); // Baca status dari tombol Blynk (1 = ON, 0 = OFF)
if (lampStatus == 1) {
digitalWrite(LED_PIN1, HIGH); // Nyalakan lampu
blynkStartTime = millis(); // Catat waktu mulai
blynkLampActive = true; // Tandai bahwa tombol Blynk mengaktifkan lampu
Serial.println("Lampu diaktifkan dari Blynk");
} else {
digitalWrite(LED_PIN1, LOW); // Matikan lampu
blynkLampActive = false;
Serial.println("Lampu dimatikan dari Blynk");
}
}
void loop() {
Blynk.run();
int pirValue = digitalRead(PIR_PIN);
Blynk.virtualWrite(V0, motionCount);
// Logika LED untuk deteksi gerakan hanya jika tidak dalam kontrol manual
if (!blynkLampActive && pirValue == HIGH && !motionActive) {
digitalWrite(LED_PIN1, HIGH); // Nyalakan lampu
Blynk.virtualWrite(V3, 1); // Update tombol di Blynk ke ON
motionStart = millis(); // Catat waktu mulai
motionActive = true;
motionCount++;
Blynk.virtualWrite(V0, motionCount);
Serial.println("Motion detected - LED 1 is on");
}
// Jika durasi nyala 5 detik telah selesai
if (!blynkLampActive && motionActive && (millis() - motionStart >= 5000)) {
digitalWrite(LED_PIN1, LOW); // Matikan lampu
Blynk.virtualWrite(V3, 0); // Update tombol di Blynk ke OFF
motionActive = false;
Serial.println("No motion - LED 1 is off");
}
delay(100); // Delay kecil untuk debounce
}