#include <Keypad.h>
#include <string.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int sliderPin = A0;
const byte linhas = 4;
const byte colunas = 4;
int buzzer = 10;
int buttonState=11;
int pinMotion1 = 13;
char matrizteclado[linhas][colunas] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte pinoslinhas[linhas] = {9,8,7,6};
byte pinoscolunas[colunas] = {5,4,3,2};
Keypad teclado = Keypad( makeKeymap(matrizteclado), pinoslinhas, pinoscolunas, linhas, colunas );
char SENHA[4] = "0123";
char CACHE_SENHA[4];
bool ligar = false;
int indexSenha = 0;
int PIR_State;
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
pinMode(11, INPUT);
pinMode(pinMotion1, INPUT);
pinMode(buzzer, OUTPUT);
Serial.println("Pressione uma tecla");
}
void loop() {
if(teclado.getKey() == 'A'){
ligar = true;
}
if(ligar){
buttonState=digitalRead(11);
PIR_State = digitalRead(PIR_State);
char senha_digitada = teclado.getKey();
if (senha_digitada =='D')
{
bool senha_invalida = false;
for (int indice= 0; indice < 4; indice++)
{
if (CACHE_SENHA[indice] != SENHA[indice])
{
senha_invalida = true;
}
}
if (senha_invalida)
{
lcd.clear();
lcd.print("Senha invalida");
indexSenha = 0;
tone(buzzer, 1000);
delay(5000);
noTone(buzzer);
memset(CACHE_SENHA, 0, sizeof(CACHE_SENHA));
}
else
{
lcd.clear();
lcd.print("Senha correta.");
indexSenha = 0;
memset(CACHE_SENHA, 0, sizeof(CACHE_SENHA));
}
return;
}
if (senha_digitada)
{
if (indexSenha == 0)
{
lcd.clear();
}
CACHE_SENHA[indexSenha++] = senha_digitada;
lcd.print(senha_digitada);
Serial.println(senha_digitada);
}
/*
if (PIR_State == 0) {
noTone(buzzer);
}
else if (PIR_State == 1) {
tone(buzzer, 1000);
}
*/
if (buttonState==HIGH){
lcd.print("alarme acionado");
tone(buzzer, 1000);
delay(10000);
buttonState == LOW;
noTone(buzzer);
}
}
}