#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <Password.h>
#define SEN_MOV 5
#define SEN_DaW 2
#define BTN_ON 11
#define BTN_OFF 10
#define BTN_SOS 9
#define LED 6
#define BUZ 3
enum EstadoAlarme { off, on };
EstadoAlarme estado = off;
bool avisado = false;
LiquidCrystal_I2C lcd(0x27, 16, 2);
const byte ROW_NUM = 4;
const byte COLUMN_NUM = 3;
Password senha = Password("1234");
const char teclas[ROW_NUM][COLUMN_NUM] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
const byte pin_rows[ROW_NUM] = { 7, 4, 1, 0 };
const byte pin_column[COLUMN_NUM] = { 13, 12, 8 };
Keypad teclado = Keypad(makeKeymap(teclas), pin_rows, pin_column, ROW_NUM, COLUMN_NUM);
int cursorPos = 0;
String senhaDigitada = "";
void setup() {
pinMode(SEN_MOV, INPUT);
pinMode(SEN_DaW, INPUT);
pinMode(BTN_ON, INPUT);
pinMode(BTN_OFF, INPUT);
pinMode(BTN_SOS, INPUT);
pinMode(LED, OUTPUT);
pinMode(BUZ, OUTPUT);
lcd.begin(16, 2);
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Aguardando...");
}
void loop() {
int DaW = digitalRead(SEN_DaW);
int MOV = digitalRead(SEN_MOV);
int ON = digitalRead(BTN_ON);
int OFF = digitalRead(BTN_OFF);
int SOS = digitalRead(BTN_SOS);
if (SOS == 1) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SOCORRO");
digitalWrite(BUZ, HIGH);
for (int i = 0; i < 12; i++) {
digitalWrite(LED, HIGH);
delay(200);
digitalWrite(LED, LOW);
delay(200);
}
digitalWrite(BUZ, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Aguardando...");
return;
}
if (ON == 1) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Digite a senha:");
senhaDigitada = "";
cursorPos = 0;
bool senhaCorreta = false;
while (!senhaCorreta) {
SOS = digitalRead(BTN_SOS);
if (SOS == 1) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SOCORRO");
digitalWrite(BUZ, HIGH);
for (int i = 0; i < 12; i++) {
digitalWrite(LED, HIGH);
delay(200);
digitalWrite(LED, LOW);
delay(200);
}
digitalWrite(BUZ, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Aguardando...");
return;
}
char leitura = teclado.getKey();
if (leitura) {
if (leitura == '#') {
for (int i = 0; i < senhaDigitada.length(); i++) {
senha.append(senhaDigitada[i]);
}
if (senha.evaluate()) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Senha correta");
estado = on;
avisado = false;
senhaCorreta = true;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Ligado.");
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Senha incorreta");
senhaDigitada = "";
cursorPos = 0;
}
senha.reset();
} else if (leitura == '*') {
if (cursorPos > 0) {
cursorPos--;
lcd.setCursor(cursorPos, 1);
lcd.print(' ');
senhaDigitada.remove(senhaDigitada.length() - 1);
}
} else if (leitura != '\0') {
lcd.setCursor(cursorPos, 1);
lcd.print(leitura);
senhaDigitada += leitura;
cursorPos++;
if (cursorPos >= 16) {
cursorPos = 0;
lcd.clear();
}
}
}
}
} else if (OFF == 1) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Digite a senha:");
senhaDigitada = "";
cursorPos = 0;
bool senhaCorreta = false;
while (!senhaCorreta) {
SOS = digitalRead(BTN_SOS);
if (SOS == 1) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SOCORRO");
digitalWrite(BUZ, HIGH);
for (int i = 0; i < 12; i++) {
digitalWrite(LED, HIGH);
delay(200);
digitalWrite(LED, LOW);
delay(200);
}
digitalWrite(BUZ, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Aguardando...");
return;
}
char leitura = teclado.getKey();
if (leitura) {
if (leitura == '#') {
for (int i = 0; i < senhaDigitada.length(); i++) {
senha.append(senhaDigitada[i]);
}
if (senha.evaluate()) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Senha correta");
estado = off;
avisado = false;
senhaCorreta = true;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Desligado.");
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Senha incorreta");
senhaDigitada = "";
cursorPos = 0;
}
senha.reset();
} else if (leitura == '*') {
if (cursorPos > 0) {
cursorPos--;
lcd.setCursor(cursorPos, 1);
lcd.print(' ');
senhaDigitada.remove(senhaDigitada.length() - 1);
}
} else if (leitura != '\0') {
lcd.setCursor(cursorPos, 1);
lcd.print(leitura);
senhaDigitada += leitura;
cursorPos++;
if (cursorPos >= 16) {
cursorPos = 0;
lcd.clear();
}
}
}
}
}
if (estado == on) {
if (DaW == 1 || MOV == 1) {
while (!avisado) {
digitalWrite(LED, HIGH);
digitalWrite(BUZ, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Defesas violadas");
avisado = true;
}
}
}
if (estado == off) {
digitalWrite(LED, LOW);
digitalWrite(BUZ, LOW);
}
}