#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define POTENTIOMETER_PIN A0 // Potentiometer pin
#define LED_PIN 5 // Alert LED
#define BUZZER_PIN 4 // Buzzer
#define CAMERA_LED_PIN 14 // Simulated Camera LED
LiquidCrystal_I2C lcd(0x27, 16, 2);
int closedThreshold = 1500; // Closed position threshold
int openThreshold = 2500; // Open/forced entry threshold
int hysteresis = 100; // Buffer to prevent constant triggering
bool isTriggered = false; // Flag to prevent repeated triggers
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(CAMERA_LED_PIN, OUTPUT);
lcd.init();
lcd.backlight();
Serial.begin(115200);
lcd.setCursor(0, 0);
lcd.print("System Armed");
lcd.setCursor(0, 1);
lcd.print("Door Closed");
}
void loop() {
int potValue = analogRead(POTENTIOMETER_PIN);
delay(50); // Small delay for debounce
// Detect forced entry if potentiometer value exceeds openThreshold and system is not already triggered
if (potValue > openThreshold && !isTriggered) {
isTriggered = true; // Set the flag to avoid repeated triggers
digitalWrite(LED_PIN, HIGH); // Alert LED ON
digitalWrite(BUZZER_PIN, HIGH); // Buzzer ON
digitalWrite(CAMERA_LED_PIN, HIGH); // Camera LED ON
Serial.println("Forced Entry Detected!");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Forced Entry!");
lcd.setCursor(0, 1);
lcd.print("Alert Sent...");
delay(2000); // Keep the alert active
digitalWrite(CAMERA_LED_PIN, LOW); // Turn off camera LED
}
// Reset only when the potentiometer value is back to a stable "closed" position
else if (potValue < closedThreshold && isTriggered) {
isTriggered = false; // Reset the flag
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("System Armed");
lcd.setCursor(0, 1);
lcd.print("Door Closed");
}
delay(100); // Delay to reduce rapid fluctuations and allow stability
}