#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Configuração do LCD 16x2 no endereço I2C 0x27
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int pirPin = 2; // Pino do sensor PIR
const int buzzerPin = 3; // Pino do buzzer
const int ledPin = 4; // Pino do LED
const int buttonPin = 5; // Pino do botão
bool alarmOn = false; // Estado do alarme
bool alarmTriggered = false; // Indica se o sensor disparou
void setup() {
pinMode(pirPin, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT); // Configura o botão com resistor pull-down
// Inicializa o LCD
lcd.init();
lcd.backlight();
// Mensagem inicial
lcd.setCursor(0, 0);
lcd.print("Alarme desligado");
}
void loop() {
int buttonState = digitalRead(buttonPin); // Lê o estado do botão
int motionState = digitalRead(pirPin); // Lê o estado do sensor PIR
// Verifica se o botão foi pressionado
if (buttonState == HIGH) {
alarmOn = true;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Alarme ligado");
} else {
alarmOn = false;
alarmTriggered = false;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Alarme desligado");
digitalWrite(buzzerPin, LOW); // Desliga o buzzer
digitalWrite(ledPin, LOW); // Desliga o LED
}
// Se o alarme estiver ligado e detectar movimento
if (alarmOn && motionState == HIGH) {
alarmTriggered = true;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Alarme disparado");
// Ativa o buzzer e o LED
digitalWrite(buzzerPin, HIGH);
digitalWrite(ledPin, HIGH);
delay(500); // Delay para o LED piscar
digitalWrite(ledPin, LOW);
delay(500); // Intervalo do LED piscando
} else if (alarmOn && !alarmTriggered) {
// Se não houver movimento, mantém o estado
digitalWrite(buzzerPin, LOW);
digitalWrite(ledPin, LOW);
}
}