// importa libreria Keypad
#include <Keypad.h>
// importa libreria Servo
#include <ESP32Servo.h>
// define numero de filas
const uint8_t ROWS = 4;
// define numero de columnas
const uint8_t COLS = 4;
// define la distribucion de teclas
char keys[ROWS][COLS] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
// pines correspondientes a las filas
uint8_t colPins[COLS] = { 16, 4, 2, 15 };
// pines correspondientes a las columnas
uint8_t rowPins[ROWS] = { 19, 18, 5, 17 };
// crea objeto con los prametros creados previamente
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
//Declaramos la variable que almacena el password
char pass[7]="ABCD45";
//Varible que alamacena la clave que se va ingresando
char ingresaPass[7];
//Variable que define el numero de letra que se va ingresando
int indice=0;
//Inicializamos las variables de los pines del led verde y rojo
int pinLedVerde=12;
int pinLedRojo=13;
//Inicializamos la variable del pin del servo
int pinServo=14;
//Instaciamos e servo
Servo servo_1;
void setup() {
pinMode(pinLedVerde, OUTPUT);
pinMode(pinLedRojo, OUTPUT);
servo_1.attach(pinServo, 500, 2500);
//Movemos el servo_1 a 0 grados
servo_1.write(0);
//Esperamos 1.5 segundos
delay(1500);
Serial.begin(115200);
}
void loop() {
// obtiene tecla presionada y asigna a variable
char key = keypad.getKey();
// comprueba que se haya presionado una tecla
if (key) {
//Alamacenamos la letra ingresada en arreglo de letras ingresaPass
ingresaPass[indice]=key;
//Aumentamos la letra que se va a alamacenar
indice++;
// envia a monitor serial la tecla presionada
Serial.println(key);
digitalWrite(pinLedVerde, LOW);
digitalWrite(pinLedRojo, LOW);
}
//Si ya se ingresaron 6 letras o mas
if(indice==6){
//Si el password coincide con la clave ingresada
if(strcmp(pass,ingresaPass)==0){
// Mostramos el mensaje de acceso permitido
Serial.println("Acceso permitido");
digitalWrite(pinLedVerde, HIGH);
//Movemos el servo_1 a 0 grados
servo_1.write(179);
//Esperamos 1.5 segundos
delay(2500);
//Movemos el servo_1 a 179 grados
servo_1.write(0);
//apagamos el led verde
digitalWrite(pinLedVerde, LOW);
//Esperamos 1.5 segundos
delay(1500);
}
//Si el password NO coincide con la clave ingresada
else{
// Mostramos el mensaje de acceso denegado
Serial.println("Acceso denegado");
digitalWrite(pinLedRojo, HIGH);
}
//Regresamos el indice a 0 para ingresar nuevas letras al password
indice=0;
}
}