#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Адрес LCD обычно 0x27
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Пины
const int pirPin = 2;
const int buzzerPin = 3;
const int ledPin = 13;
// Переменные состояния
bool armed = false;
bool alarmActive = false;
void setup() {
pinMode(pirPin, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Alarm system");
lcd.setCursor(0, 1);
lcd.print("DISARMED");
Serial.println("Отправь 1 - включить охрану");
Serial.println("Отправь 0 - выключить охрану");
}
void loop() {
// Проверка команд из Serial Monitor
if (Serial.available()) {
char cmd = Serial.read();
if (cmd == '1') {
armed = true;
alarmActive = false;
lcd.clear();
lcd.print("System ARMED");
Serial.println("Охрана включена");
}
if (cmd == '0') {
armed = false;
alarmActive = false;
digitalWrite(buzzerPin, LOW);
digitalWrite(ledPin, LOW);
lcd.clear();
lcd.print("System DISARMED");
Serial.println("Охрана выключена");
}
}
// Проверка движения
if (armed && digitalRead(pirPin) == HIGH) {
alarmActive = true;
}
// Если тревога активна
if (alarmActive) {
lcd.setCursor(0, 0);
lcd.print("ALARM! ");
lcd.setCursor(0, 1);
lcd.print("INTRUDER! ");
digitalWrite(ledPin, HIGH);
tone(buzzerPin, 1000);
delay(200);
digitalWrite(ledPin, LOW);
noTone(buzzerPin);
delay(200);
}
}