#define BLYNK_TEMPLATE_ID "TMPLnwessMgV"
#define BLYNK_DEVICE_NAME "Sistem Keamanan Anti Maling untuk Rumah"
#define BLYNK_AUTH_TOKEN "xv2Mi-4_TIS4tz7lZSwyXT4eKH9PA23M"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <TimeLib.h>
#include <NTPClient.h>
const long utcOffsetInSeconds = 25200;
char hari[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"};
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "id.pool.ntp.org", utcOffsetInSeconds);
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
#define pinLedRed 5 //D5
#define pinLedGreen 18 //D18
const int PIR = 19; //D19
const int Buzzer = 15; //D15
long timer_start_set[2] = {0xFFFF, 0xFFFF};
long timer_stop_set[2] = {0xFFFF, 0xFFFF};
unsigned char weekday_set[2];
long rtc_sec;
unsigned char day_of_week;
int jamStartStop[2] = {0, 0};
int menitStartStop[2] = {0, 0};
// #########################################################################################################
// Timer
BLYNK_WRITE(V0)
{
unsigned char week_day;
TimeInputParam t(param);
if (t.hasStartTime() && t.hasStopTime() )
{
timer_start_set[0] = (t.getStartHour() * 60 * 60) + (t.getStartMinute() * 60) + t.getStartSecond();
timer_stop_set[0] = (t.getStopHour() * 60 * 60) + (t.getStopMinute() * 60) + t.getStopSecond();
Serial.println(String("Start Time: ") +
t.getStartHour() + ":" +
t.getStartMinute() + ":" +
t.getStartSecond());
Serial.println(String("Stop Time: ") +
t.getStopHour() + ":" +
t.getStopMinute() + ":" +
t.getStopSecond());
}
else
{
timer_start_set[0] = 0xFFFF;
timer_stop_set[0] = 0xFFFF;
}
}
// #########################################################################################################
BLYNK_CONNECTED()
{
Serial.println("Connected");
Blynk.sendInternal("rtc", "sync");
Blynk.syncVirtual(V0,V1,V2);
}
// #########################################################################################################
void checkTime()
{
Blynk.sendInternal("rtc", "sync");
}
void setup()
{
Serial.begin(9600);
delay(100);
pinMode(PIR, INPUT);
pinMode(Buzzer, OUTPUT);
pinMode(pinLedRed, OUTPUT);
pinMode(pinLedGreen, OUTPUT);
digitalWrite(Buzzer, LOW);
Blynk.begin(auth, ssid, pass);
timer.setInterval(10000L, checkTime);
timeClient.begin();
}
void loop() {
Blynk.run();
timer.run();
readPIR();
}
long currentTime ;
void timeUpdate(){
timeClient.update();
Serial.print(hari[timeClient.getDay()]);
Serial.print(", ");
Serial.print(timeClient.getHours());
Serial.print(":");
Serial.print(timeClient.getMinutes());
Serial.print(":");
Serial.print(timeClient.getSeconds());
Serial.print(" | ");
currentTime = (timeClient.getHours() * 60 * 60) + (timeClient.getMinutes() * 60) + timeClient.getSeconds();
}
double millisTemp;
int interval = 100;
void readPIR(){
if(millis() > millisTemp + interval){
timeUpdate();
int state = digitalRead(PIR);
if(state == HIGH) {
Serial.println("Ada Pergerakan Manusia!");
if(currentTime >= timer_start_set[0] and currentTime <= timer_stop_set[0]){
Blynk.virtualWrite(V1, " Ada Pergerakan !");
Blynk.virtualWrite(V2, " MALINGGG!!!! ");
delay(75);
Blynk.virtualWrite(V2, " MALINGGG!!!! ");
delay(75);
for(int x=0; x<20; x++){
//blink led&buzzer
digitalWrite (pinLedGreen, LOW);
tone(Buzzer, 150);
digitalWrite (pinLedRed, HIGH);
delay(75);
noTone(Buzzer);
digitalWrite (pinLedRed, LOW);
delay(75);
}
}
}
else {
Serial.println("TIDAK ada Pergerakan!");
Blynk.virtualWrite(V1, "Kondisi Ruangan");
Blynk.virtualWrite(V2, " Aman !");
digitalWrite (pinLedGreen, HIGH);
}
millisTemp = millis();
}
}