#include <Keypad.h> // Inclui a biblioteca para controle do teclado matricial
#include <Servo.h> // Inclui a biblioteca para controle do servo motor
// Definindo as portas do teclado
byte PinosLinhas[] = {9, 8, 7, 6}; // Define os pinos do Arduino conectados às linhas do teclado
byte PinosColunas[] = {5, 4, 3, 2}; // Define os pinos do Arduino conectados às colunas do teclado
// Definindo as portas dos LEDs e do servo
#define ledVermelho A4 // Define o pino para o LED vermelho
#define ledVerde A5 // Define o pino para o LED verde
#define PinoServo 10 // Define o pino para o servo motor
// Definindo a senha e teclas
#define caracteres 4 // Define o número de caracteres da senha
char password[] = "ABCD"; // Define a senha correta
char matrizTeclas[4][4] = { // Define a matriz de teclas do teclado matricial
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
// Variáveis auxiliares, verifica se a senha está correta
char tecla; // Armazena a tecla pressionada
int posicao = 0; // Verifica a posição do caractere na senha
// Inicializa o objeto teclado com a matriz de teclas e pinos
Keypad teclado(makeKeymap(matrizTeclas), PinosLinhas, PinosColunas, 4, 4);
// Inicializa o objeto servo para controle do servo motor
Servo servo;
void setup() {
Serial.begin(9600); // Inicia a comunicação serial a 9600 bps
pinMode(ledVermelho, OUTPUT); // Define o pino do LED vermelho como saída
pinMode(ledVerde, OUTPUT); // Define o pino do LED verde como saída
pinMode(PinoServo, OUTPUT); // Define o pino do servo motor como saída
servo.attach(PinoServo); // Anexa o servo motor ao pino definido
Serial.println("Entre com a Senha..."); // Mensagem inicial no monitor serial
trancada(); // Inicia a fechadura como trancada
}
void loop() {
tecla = teclado.getKey(); // Lê a tecla pressionada no teclado matricial
if (tecla) { // Verifica se alguma tecla foi pressionada
switch (tecla) {
case '*':
trancada(); // Tranca a fechadura se a tecla '*' for pressionada
posicao = 0; // Reseta a posição na senha
break;
case '#':
trancada(); // Tranca a fechadura se a tecla '#' for pressionada
posicao = 0; // Reseta a posição na senha
break;
default:
Serial.print('*'); // Imprime um asterisco no lugar da tecla pressionada
// Verifica se a tecla pressionada está correta
if (tecla == password[posicao]) {
posicao++; // Avança para a próxima posição na senha
} else {
posicao = 0; // Reseta a posição se a tecla estiver incorreta
Serial.println("Senha incorreta. Pressione (* ou #) e tente novamente."); // Mensagem de erro
}
if (posicao == caracteres) { //Verifica se a senha foi digitada corretamente
destrancada(); // Destranca a fechadura
posicao = 0; // Reseta a posição após desbloquear
}
break;
}
}
}
void trancada() {
digitalWrite(ledVermelho, HIGH); // Acende o LED vermelho
digitalWrite(ledVerde, LOW); // Apaga o LED verde
servo.write(90); // Move o servo para a posição trancada (90 graus)
Serial.println(""); // Pula uma linha no monitor serial
Serial.println("TRANCADO"); // Imprime "TRANCADO" no monitor serial
}
void destrancada() {
digitalWrite(ledVermelho, LOW); // Apaga o LED vermelho
digitalWrite(ledVerde, HIGH); // Acende o LED verde
servo.write(180); // Move o servo para a posição destrancada (180 graus)
Serial.println(" - ABERTO"); // Imprime "ABERTO" no monitor serial
}