#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <Servo.h>
// Configuração do LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Configuração do Teclado Matricial
const byte ROWS = 4;
const byte COLS = 4;
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};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
// Configuração do Servo Motor
Servo servo;
const int servoPin = 10;
// LEDs
const int ledVerde = 12;
const int ledVermelho = 11;
// Senha
String senhaCorreta = "1234";
String entradaSenha = "";
void setup() {
lcd.begin(16, 2);
lcd.backlight();
pinMode(ledVerde, OUTPUT);
pinMode(ledVermelho, OUTPUT);
servo.attach(servoPin);
// Inicialização
lcd.setCursor(0, 0);
lcd.print("Digite a senha:");
servo.write(0); // Servo fechado inicialmente
}
void loop() {
char key = keypad.getKey();
if (key) {
if (key == '#') {
verificarSenha();
} else if (key == '*') {
entradaSenha = ""; // Resetar senha
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Digite a senha:");
} else {
entradaSenha += key;
lcd.setCursor(0, 1);
lcd.print(entradaSenha);
}
}
}
void verificarSenha() {
lcd.clear();
if (entradaSenha == senhaCorreta) {
lcd.setCursor(0, 0);
lcd.print("Acesso Permitido");
digitalWrite(ledVerde, HIGH);
digitalWrite(ledVermelho, LOW);
servo.write(90); // Abrir porta
delay(3000);
} else {
lcd.setCursor(0, 0);
lcd.print("Acesso Negado!");
digitalWrite(ledVerde, LOW);
digitalWrite(ledVermelho, HIGH);
servo.write(0); // Manter porta fechada
delay(3000);
}
// Resetar
entradaSenha = "";
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Digite a senha:");
digitalWrite(ledVerde, LOW);
digitalWrite(ledVermelho, LOW);
}