#include <Keypad.h>
//#include <LiquidCrystal.h> //RETIRAR ESSA LINHA DO CÓDIGO
#include <LiquidCrystal_I2C.h> //LINHA INCLUÍDA NO CÓDIGO
#include <ESP32Servo.h>
//LiquidCrystal lcd(12,11,9,8,7,6); //(RS,E,D4,D5,D6,D7); RETIRAR ESSA LINHA DO CÓDIGO
LiquidCrystal_I2C lcd(0x27, 16,2);
Servo meuServo;
const byte ROWS = 4; //quatro linhas
const byte COLS = 4; //quatro colunas
char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
//byte rowPins[ROWS] = {5, 4, 3, 2}; //conectar aos pinos das linhas no seu teclado RETIRAR ESSA LINHA DO CÓDIGO
//byte colPins[COLS] = {14, 15, 16, 17}; //conectar aos pinos das colunas no seu teclado RETIRAR ESSA LINHA DO CÓDIGO
byte rowPins[ROWS] = {19, 18, 17, 16}; // Conectados respectivamente aos pinos L1, L2, L3 e L4 do teclado - LINHA INCLUÍDA NO CÓDIGO
byte colPins[COLS] = {5, 4, 33, 2}; // Conectados respectivamente aos pinos C1, C2, C3 e C4 do teclado - LINHA INCLUÍDA NO CÓDIGO
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
signed char i, e;
boolean var=0;
char chave[16], a, limit;
char chavea[16]={'1','2','3'}; //Chave por defeito para o administrador
char limita=3;
int x=1;
int thisChar ='*';
void setup() {
lcd.init();
lcd.backlight();
pinMode(18,OUTPUT); // pino 18 como saída para a ativação da iluminação do display
meuServo.attach (12); // pino 12 para o Servo Motor
meuServo.write(1);
}
void loop() {
lcd.backlight(); //TESTE DO DISPLAY
lcd.clear(); // limpar conteúdo do display
inicio: // etiqueta de inicio
digitalWrite(18,LOW); // Mantém apagada a iluminação do display
for(;;){ // aguarda o pressionamento de alguma tecla do teclado
do{ a= customKeypad.getKey();
}while(a==0);
tone(19,2000); //gera um sinal sonoro no buzzer
delay(500);
noTone(19); // finaliza o sinal sonoro no buzzer
digitalWrite(18,HIGH); // acende a luz de fundo do display
menu_inicial(); // retorna ao menu inicial
goto inicio; // retorna ao inicio
}
}
//======================================================================================================================================
// Saudação inicial.
//======================================================================================================================================
void menu_inicial()
{
lcd.backlight(); //TESTE DO DISPLAY
lcd.setCursor(0,0);
lcd.print(" Bem vindo");
lcd.setCursor(0,1);
lcd.print(" Welcome");
delay(2000);
um: // escolha um
lcd.backlight(); //TESTE DO DISPLAY
lcd.setCursor(0,0);
lcd.print("Admin->A User->B");
for(;;){
do{a=customKeypad.getKey();
}while(a==0); // aguarda o pressionamento de alguma tecla do teclado
tone(19,2000); // gera um sinal sonoro no buzzer
delay(100);
noTone(19); // finaliza o sinal sonoro no buzzer
if(a=='A'){ // se pressionar "A" ir para a função administrador
admin();
delay(1000);
break;
}
if(a=='B'){ // se pressionar "B" ir para a função Usuário
usuario();
delay(1000);
break;
}
if(a!='A' && a!='B'){
lcd.clear(); // limpar conteúdo do display
lcd.setCursor(0,0);
lcd.print("Tecla Incorreta");
lcd.setCursor(0,1);
lcd.print("Corrigir por favor");
delay(2000);
goto um;
}
}
lcd.clear(); // limpar conteúdo do display
}
//=================================================================================================
// Acesso como Usuário
//=================================================================================================
void usuario(){
dois:
lcd.backlight(); //TESTE DO DISPLAY
lcd.clear(); // limpar conteúdo do display
//lcd.setCursor(0,0);
lcd.print("Entre a sua chave:");
for(i=0; ; i++){
do{a=customKeypad.getKey();
}while(a==0);
tone(19,2000); // gera um sinal sonoro no buzzer
delay(100);
noTone(19); // finaliza o sinal sonoro no buzzer
lcd.setCursor(x,1);
lcd.print('*');
x++;
if(a=='C' || a=='D')
{
if(i==0) // se ao não escrever nenhuma chave
{
lcd.clear(); // limpar conteúdo do display
lcd.setCursor(0,0);
lcd.print("Escreva uma!");
delay(1000);
i=-1;
x=0;
continue;
}
if(i!=limit)
var=1;
x=0;
break;
}
if(a!=chave[i])
var=1;
}
if(var>0)
{
lcd.clear(); // limpar conteúdo do display
lcd.setCursor(0,0);
lcd.print("Acesso Negado");
delay(2000);
x=0;
//break;
}
else
{
lcd.clear(); // limpar conteúdo do display
lcd.setCursor(0,0);
lcd.print("Acesso Permitido");
meuServo.write(80);
tone(19,2000); // gera um sinal sonoro no buzzer
delay(500);
noTone(19); // finaliza o sinal sonoro no buzzer
delay(500);
lcd.setCursor(0,1);
lcd.println("Não esqueça fechar");
delay(2000);
meuServo.write(0);
x=0;
}
var=0;
lcd.clear();
}
//=========================================================================================
// Acesso como Administrador
//=========================================================================================
void admin() {
dois:
lcd.backlight(); //TESTE DO DISPLAY
lcd.clear(); // limpar conteúdo do display
lcd.setCursor(0,0);
lcd.print("Entre com a chave");
for(e=0; ; e++){
do{a=customKeypad.getKey();
}while(a==0);
tone(19,2000); // gera um sinal sonoro no buzzer
delay(100);
noTone(19); // finaliza o sinal sonoro no buzzer
lcd.setCursor(x,1);
lcd.print("*");
x++;
if(a=='C' || a=='D'){
if(e==0)
{
lcd.clear(); // limpar conteúdo do display
lcd.setCursor(0,0);
lcd.print("Escreva uma!");
delay(1000);
e=-1;
x=0;
continue;
}
if(e!= limita)
var=1;
x=0;
break;
}
if(a!=chavea[e])
var=1;
}
if(var>0)
{
lcd.clear(); // limpar conteúdo do display
lcd.setCursor(0,0);
lcd.print("Chave Incorreta!");
tone(19,2000); //gera um sinal sonoro no buzzer
delay(500);
noTone(19); //finaliza o sinal sonoro no buzzer
delay(500);
tone(19,2000); //gera um sinal sonoro no buzzer
delay(500);
noTone(19); //finaliza o sinal sonoro no buzzer
delay(500);
x=0;
//break;
}
else
{
lcd.clear(); // limpar conteúdo do display
lcd.setCursor(0,0);
lcd.print("Chave Correta!");
x=0;
tone(19,2000); //gera um sinal sonoro no buzzer
delay(500);
noTone(19); //finaliza o sinal sonoro no buzzer
delay(1500);
menu_admin();
}
var=0;
lcd.clear(); //Limpa o conteúdo do display
}
//==========================================================================
// Menu de Mudança de Chave
//==========================================================================
void menu_admin()
{
treis: // Rótulo
lcd.backlight(); //TESTE DO DISPLAY
lcd.clear(); //Limpa o conteúdo do display
lcd.setCursor(0,0);
lcd.print("Pode Mudar");
lcd.setCursor(0,1);
lcd.print("Chaves de.....");
delay(2000);
lcd.clear(); //Limpa o conteúdo do display
lcd.setCursor(0,0);
lcd.print("Admin->A User->B");
for(; ;)
{
do{a=customKeypad.getKey();
}while(a==0);
tone(19,2000); //gera um sinal sonoro no buzzer
delay(100);
noTone(19); //finaliza o sinal sonoro no buzzer
if(a=='A'){
cambio_admin();
break;
}
if(a=='B'){
cambio_usuario();
break;
}
if(a!='A' && a!='B')
{
lcd.clear(); //Limpa o conteúdo do display
lcd.setCursor(0,0);
lcd.print("Chave Incorreta");
lcd.setCursor(0,1);
lcd.print("Corrigir Por Favor");
delay(2000);
goto treis;
}
}
lcd.clear(); //Limpa o conteúdo do display
}
//===========================================================================================
// Mudança de chave Administrador
//===========================================================================================
void cambio_admin()
{
lcd.backlight(); //TESTE DO DISPLAY
lcd.clear(); //Limpa o conteúdo do display
lcd.setCursor(0,0);
lcd.print("Nova Chave");
for(e=0;e<16;e++)
{
do{a=customKeypad.getKey();
}while(a==0);
tone(19,2000); //gera um sinal sonoro no buzzer
delay(100);
noTone(19); //finaliza o sinal sonoro no buzzer
if(a=='C' || a=='D')
{
if(e==0){
lcd.clear(); //Limpa o conteúdo do display
lcd.setCursor(0,0);
lcd.print("Escreva uma!");
delay(500);
e=-1;
x=0;
continue;
}
lcd.clear(); //Limpa o conteúdo do display
lcd.setCursor(0,0);
lcd.print("Salvando Chave");
lcd.setCursor(0,1);
lcd.print("Nova...!");
delay(2000);
lcd.clear(); //Limpa o conteúdo do display
lcd.setCursor(0,0);
lcd.println("Nova Chave");
lcd.setCursor(0,1);
lcd.print("Salva...");
tone(19,2000); //gera um sinal sonoro no buzzer
delay(250);
noTone(19); //finaliza o sinal sonoro no buzzer
delay(1750);
x=0;
break;
}
lcd.setCursor(x,1);
lcd.print(a);
x++;
limita=e+1;
chavea[e]=a;
}
lcd.clear(); //Limpa o conteúdo do display
}
//====================================================================================================
// Mudança de Chave Usuário
//====================================================================================================
void cambio_usuario(){
lcd.backlight(); //TESTE DO DISPLAY
lcd.clear(); //Limpa o conteúdo do display
lcd.setCursor(0,0);
lcd.print("Nova Chave: ");
for(i=0; i<16; i++)
{
do{a=customKeypad.getKey();
}while(a==0);
tone(19,2000); //gera um sinal sonoro no buzzer
delay(100);
noTone(19); //finaliza o sinal sonoro no buzzer
if(a=='C' || a=='D')
{
if(i==0)
{
lcd.clear(); //Limpa o conteúdo do display
lcd.setCursor(0,0);
lcd.print("Escreva uma:");
delay(500);
i=-1;
x=0;
continue;
}
lcd.clear(); //Limpa o conteúdo do display
lcd.setCursor(0,0);
lcd.print("Salvando Chave");
lcd.setCursor(0,1);
lcd.print("Nova....!");
delay(2000);
lcd.clear(); //Limpa o conteúdo do display
lcd.setCursor(0,0);
lcd.print("Nova Chave");
lcd.setCursor(0,1);
lcd.print("Salva...");
delay(2000);
x=0;
break;
}
lcd.setCursor(x,1);
lcd.print(a);
x++;
limit=i+1;
chave[i]=a;
}
lcd.clear(); //Limpa o conteúdo do display
}