/* Programa: Fechadura Eletrônica */
/* Inclui a biblioteca de controle do teclado */
#include <Keypad.h>
/* Inclui a biblioteca do Display de Cristal Liquido */
#include <LiquidCrystal_I2C.h>
/* Inclui a biblioteca do servo motor */
#include <ESP32Servo.h>
/* Cria um objeto servo para controle do servo */
Servo servo1;
/* Cria um objeto lcd para controle do display */
LiquidCrystal_I2C lcd(0x27, 16,2);
/* Senha para destrancar a fechadura */
char* password = "412459";
/* Quantidade de caracteres que a senha possui */
int caracteres = 6;
/* Pinos que estão conectados os LEDs */
const int ledVermelho = 12;
const int ledVerde = 13;
const int Pin_Servo = 14;
/* Variável para leitura de posição da tecla
pressionada */
int posicao = 0;
/* Define o número de linhas e colunas do teclado */
const byte N_Lin = 4;
const byte N_Col = 4;
/* Construção da matriz de caracteres */
char m_tec[N_Lin][N_Col] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
/* Pinos utilizados pelas linhas e colunas do teclado
*/
byte Pin_Lin[N_Lin] = {19, 18, 17, 16};
byte Pin_Col[N_Col] = {5, 4, 33, 2};
/* Inicializa o teclado */
Keypad tec = Keypad( makeKeymap(m_tec), Pin_Lin, Pin_Col, N_Lin,
N_Col);
void setup() {
/* Inicia o display LCD */
lcd.init();
/* Acende a luz de fundo do display */
lcd.backlight();
/* Configura os pinos dos LEDs como saída */
pinMode(ledVermelho, OUTPUT);
pinMode(ledVerde, OUTPUT);
/* Define o pino de dados para o servo */
servo1.attach(Pin_Servo);
/* Define a velocidade de comunicação serial em 9600
bauds */
Serial.begin(9600);
/* Imprime no monitor serial o texto entre aspas */
Serial.println("Digite a senha !");
lcd.clear();
lcd.setCursor(1,0);
//lcd.clear();
lcd.print("Digite a senha !");
delay(3000);
/* Quebra uma linha no monitor serial */
Serial.println();
/* Inicia com a fechadura trancada */
trancada();
servo1.write(90);
}
void loop() {
/* Captura a tecla pressionada*/
char key = tec.getKey();
/* Se a tecla pressionada for “*” ou “#” reinicia a
tentativa com a fechadura trancada */
if (key == '*' || key == '#') {
posicao = 0;
trancada();
}
/* Se as teclas pressionadas coincidirem com a
senha, destranque a fechadura */
if (key == password[posicao]) {
posicao ++;
}
if (posicao == caracteres) {
destrancada();
}
/* Pequena pausa para retomar a leitura */
delay(100);
}
/* Função que mantém a fechadura trancada */
void trancada()
{
/* LED Vermelho acende */
digitalWrite(ledVermelho, HIGH);
/* LED Verde apaga */
digitalWrite(ledVerde, LOW);
/* Servo na posição trancada */
servo1.write(90);
/* Imprime no monitor serial que a fechadura está
TRANCADA */
Serial.println("TRANCADA");
lcd.clear();
lcd.setCursor(4,1);
lcd.print("TRANCADA");
delay(3000);
}
/* Função que mantém a fechadura destrancada */
void destrancada()
{
/* LED Verde acende */
digitalWrite(ledVerde, HIGH);
/* LED Vermelho apaga */
digitalWrite(ledVermelho, LOW);
/* Servo na posição destrancada */
servo1.write(180);
/* Imprime no monitor serial que a fechadura está
ABERTA */
Serial.println("ABERTA");
lcd.clear();
lcd.setCursor(5,1);
//lcd.clear();
lcd.print("ABERTA");
delay (3000);
posicao = 0;
trancada ();
}