#include <Keypad.h>
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
// Definindo o teclado matricial 4x4
const byte ROWS = 4; // 4 linhas
const byte COLS = 4; // 4 colunas
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; // Conecte as linhas do teclado aos pinos
byte colPins[COLS] = {5, 4, 3, 2}; // Conecte as colunas do teclado aos pinos
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
// Definindo o lcd
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Definindo o servo motor
Servo myServo;
const int servoPin = 10;
// Senha correta
String senhaCorreta = "12";
String senhaDigitada = "";
// Variáveis de controle
bool portaAberta = false;
void setup() {
// Inicia o servo motor e define a posição inicial (porta fechada)
myServo.attach(servoPin);
myServo.write(90); // Porta travada
// Inicia o monitor serial para debug
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Sistema de Senha");
lcd.setCursor(4,1);
lcd.print("Iniciado");
delay(2000);
lcd.clear();
digitaSenha();
}
void loop() {
char tecla = keypad.getKey(); // Lê a tecla pressionada
if (tecla) {
// Se a tecla '*' for pressionada, limpa a senha digitada
if (tecla == '*') {
lcd.clear();
senhaDigitada = "";
lcd.setCursor(4,0);
lcd.print("Senha");
lcd.setCursor(3,1);
lcd.print("Resetada");
delay(1000);
digitaSenha();
}
// Se a tecla '#' for pressionada, verifica a senha
else if (tecla == '#') {
if (senhaDigitada == senhaCorreta) {
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Senha correta!");
lcd.setCursor(2,1);
lcd.print("Porta aberta");
delay(1500);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Seja Bem-vinda");
lcd.setCursor(4,1);
lcd.print("Meu amor");
delay(1500);
abrirPorta();
} else {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Senha incorreta!");
senhaDigitada = ""; // Reseta a senha digitada
delay(1000);
lcd.clear();
digitaSenha();
}
}
// Adiciona o número à senha digitada
else {
lcd.clear();
senhaDigitada += tecla;
lcd.setCursor(1,0);
lcd.print(" Senha: ");
lcd.setCursor(2,1);
lcd.print(senhaDigitada);
}
}
}
// Função para abrir a porta (destrava)
void abrirPorta() {
myServo.write(0); // Gira o servo para abrir a porta
delay(5000); // Mantém a porta aberta por 5 segundos
fecharPorta(); // Fecha a porta após o tempo
}
// Função para fechar a porta (trava)
void fecharPorta() {
myServo.write(90); // Retorna o servo à posição de travamento
lcd.clear();
lcd.setCursor(2,1);
lcd.print("Porta fechada");
senhaDigitada = "";
delay(1000);
lcd.clear();
digitaSenha();
}
void digitaSenha() {
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Digite a Senha");
lcd.setCursor(2,1);
lcd.print(" < < <-----");
}