#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define TOTAL_ROWS 2
#define TOTAL_COLUMNS 16
const int pir = 14;
const int armingButton = 2; // Button to arm the alarm
const int disarmingButton = 3; // Button to disarm the alarm
#define Buzzer 4
LiquidCrystal_I2C lcd(I2C_ADDR, TOTAL_COLUMNS, TOTAL_ROWS);
bool armed = false; // Alarm status: true if armed, false if disarmed
#define BLYNK_TEMPLATE_ID "TMPL22hsdEfCt"
#define BLYNK_TEMPLATE_NAME "Project"
#define BLYNK_AUTH_TOKEN "ekZa-s1y02oLoM3_KALeJeimkTzGD9mL"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
BLYNK_WRITE(V0) {
int armedswitch = param.asInt();
Serial.println(armedswitch);
if(armedswitch==1)
{
digitalWrite(Buzzer, HIGH);
}
else
{
digitalWrite(Buzzer, LOW);
}
}
void myTimerEvent()
{
// Check if the arming button is pressed
if (digitalRead(armingButton) == LOW && !armed) {
armed = true;
digitalWrite(Buzzer, HIGH);
Serial.println("Alarm Armed");
}
// Check if the disarming button is pressed
if (digitalRead(disarmingButton) == LOW && armed) {
armed = false;
digitalWrite(Buzzer, LOW);
Serial.println("Alarm Disarmed");
}
// If the alarm is armed and the PIR sensor detects motion
if ( digitalRead(pir) == HIGH)
{
lcd.clear();
lcd.println("INTRUDER ALERT");
digitalWrite(Buzzer, HIGH); // Sound the buzzer
delay(5000); // Alarm duration
digitalWrite(Buzzer, LOW); // Turn off the buzzer
} else {
lcd.clear();
lcd.println("All Secure.");
}
delay(500); // Add a small delay to prevent rapid LCD updates
}
void setup() {
lcd.init();
lcd.backlight();
pinMode(pir, INPUT);
pinMode(Buzzer, OUTPUT);
pinMode(armingButton, INPUT_PULLUP); // Using internal pull-up resistors
pinMode(disarmingButton, INPUT_PULLUP); // Using internal pull-up resistors
digitalWrite(Buzzer, LOW);
Serial.begin(9600);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
timer.setInterval(1000L, myTimerEvent);
}
void loop() {
Blynk.run();
timer.run();
}