#include <LiquidCrystal_I2C.h>
// Inicialize o LCD com o endereço 0x27 e uma tela de 20x4 caracteres
LiquidCrystal_I2C lcd(0x27, 20, 4);
/* Variáveis de estado */
int slide1 = 0;
int pirJanela = 0;
int pirPorta = 0;
int pinoBuzzer = 12; // Pino do buzzer
int btnEmerg = 10; // Pino do botão de emergência
int ledEmerg = 11; // Pino do LED de emergência
bool estadoEmergencia = false; // Variável para controlar o estado de emergência
void setup() {
/* Inicialização do LCD */
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Programa Sensor");
delay(2000); // Aguarde 2 segundos para exibir a mensagem de inicialização
lcd.clear();
/* Configuração dos pinos */
pinMode(13, OUTPUT); // LED verde que liga quando os sensores estão ativos
pinMode(2, INPUT_PULLUP); // Slide 1 que ativa todos os sensores
pinMode(4, INPUT); // Sensor PIR da janela
pinMode(3, INPUT); // Sensor PIR da porta
pinMode(pinoBuzzer, OUTPUT); // Pino do buzzer
pinMode(btnEmerg, INPUT_PULLUP); // Botão de emergência (configurado com INPUT_PULLUP)
pinMode(ledEmerg, OUTPUT); // LED de emergência (pino 11)
Serial.begin(9600);
}
void loop() {
// Leitura do estado do slide e do botão de emergência
slide1 = digitalRead(2); // Estado do slide switch
int emergState = digitalRead(btnEmerg); // Estado do botão de emergência
// Se o botão de emergência for pressionado (estado LOW, porque está configurado com INPUT_PULLUP)
if (emergState == LOW) {
estadoEmergencia = true; // Ativa o estado de emergência
}
// Se o sistema está em estado de emergência
if (estadoEmergencia) {
// Desativa o restante do sistema e mantém o estado de emergência
digitalWrite(ledEmerg, HIGH); // Liga o LED de emergência
digitalWrite(pinoBuzzer, HIGH); // Ativa o buzzer
lcd.clear(); // Limpa o display LCD
lcd.setCursor(0, 0);
lcd.print("Emergencia!"); // Exibe mensagem de emergência
delay(5000); // Pequeno atraso para garantir a visibilidade
// Reinicializa as variáveis e retorna o sistema ao estado inicial
estadoEmergencia = false; // Desativa o estado de emergência
digitalWrite(ledEmerg, LOW); // Desliga o LED de emergência
digitalWrite(pinoBuzzer, HIGH); // Desativa o buzzer
// Simula o reinício do programa
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Reiniciando sistema"); // Exibe mensagem de reinício
delay(2000); // Mostra a mensagem de reinício por 2 segundos
// Limpa o display e reseta o sistema para o estado inicial
lcd.clear();
setup(); // Chama a função `setup` para reiniciar os estados
return; // Sai do loop para recomeçar o ciclo
}
// Controle do sistema baseado no estado do slide switch
if (slide1 == HIGH) {
digitalWrite(13, HIGH); // Liga o LED de estado
lcd.setCursor(0, 2);
lcd.print("Alarme ativado! ");
// Verifica e mostra a detecção dos sensores PIR
pirJanela = digitalRead(4);
pirPorta = digitalRead(3);
lcd.setCursor(0, 0);
if (pirJanela == HIGH) { // Sensor PIR normalmente em HIGH, LOW significa movimento detectado
lcd.print("Janela: Detect ");
} else {
lcd.print("Janela: No detect ");
}
lcd.setCursor(0, 1);
if (pirPorta == HIGH) { // Sensor PIR normalmente em HIGH, LOW significa movimento detectado
lcd.print("Porta: Detect ");
} else {
lcd.print("Porta: No detect ");
}
// Aciona o buzzer se houver movimento em qualquer um dos sensores
if (pirJanela == LOW || pirPorta == LOW) {
digitalWrite(pinoBuzzer, HIGH); // Ativa o buzzer
} else {
digitalWrite(pinoBuzzer, LOW); // Desativa o buzzer
}
} else {
// Se o slide switch estiver em LOW, o sistema está desativado
digitalWrite(13, LOW); // Desativa o LED
digitalWrite(pinoBuzzer, LOW); // Desativa o buzzer
lcd.setCursor(0, 2);
lcd.print("Alarme desativado ");
}
delay(500); // Atraso para evitar atualizações muito rápidas
}