#include <ESP32Servo.h>
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
const byte ROWS = 4; //Jumlah baris keypad
const byte COLS = 4; //Jumlah kolom keypad
#define vm 32
#define vd 5
#define buzzer 4
#define SDA 23 //Define pinos SDA
#define SCL 22 //Define pinos SCL
LiquidCrystal_I2C lcd(0x27,16,2);
char customKey;
int number = 0;
int password = 1234;
// SERVOMOTORCONFIGS
int anguloServo = 0;
Servo servo;
int pinServo=2;
char Keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {14,13,12,15};
byte colPins[COLS] = {21,27,25,26};
Keypad customKeypad = Keypad( makeKeymap(Keys), rowPins, colPins, ROWS, COLS);
int contador = 0;
void setup() {
pinMode(vm, OUTPUT);
pinMode(vd, OUTPUT);
pinMode(buzzer, OUTPUT);
// LCD
Wire.begin(SDA, SCL); // Conecta o pino I2C.
lcd.init(); // Inicialização do drive do LCD
lcd.backlight(); // Acende a luz de fundo
servo.attach(pinServo, 500, 2500);
}
void loop() {
digitalWrite(vm, 0);
digitalWrite(vd, 0);
lcd.setCursor(0,0);
lcd.print("Digite a Senha:");
customKey = customKeypad.getKey();
switch(customKey){
case '0' ... '9':
lcd.setCursor(0,1);
number = number * 10 + (customKey - '0');
lcd.print(number);
digitalWrite(buzzer, 1);
delay(300);
digitalWrite(buzzer, 0);
break;
case '#':
if(number == password){
lcd.setCursor(0,1);
lcd.print("Acesso Liberado");
servo.write(anguloServo);
digitalWrite (vd, HIGH);
digitalWrite (vm, LOW);
delay (2000);
number = 0;
lcd.clear();
servo.write(90);
}
else{
lcd.setCursor(0,1);
lcd.print("Acesso Negado");
digitalWrite (vd, LOW);
digitalWrite (vm, HIGH);
contador++;
delay(2000);
number = 0;
lcd.clear();
}
break;
}
if (contador == 5) { // Se a LED vermelha acendeu 5 vezes
for (int i = 0; i < 5; i++) { // Repete o alarme 5 vezes
lcd.setCursor(6,0);
lcd.print("ALARME");
lcd.setCursor(4,1);
lcd.print("DISPARADO");
digitalWrite(buzzer, HIGH); // Liga o buzzer
delay(500); // Aguarda 0,5 segundos
digitalWrite(buzzer, LOW); // Desliga o buzzer
delay(500); // Aguarda 0,5 segundos
lcd.clear();
}
contador = 0; // Reinicia o contador
}
}