//Importar las librerias
#include <Keypad.h>
#include <LiquidCrystal.h>
//4x4 Keypad (Teclado)
const int ROW_NUM = 4; //cuatro filas
const int COLUMN_NUM = 4; //cuatro columnas
char keys[ROW_NUM][COLUMN_NUM] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //conectar a los pines de fila del teclado
byte pin_column[COLUMN_NUM] = {5, 4, 3, 2}; //conectar a los pines de columna del teclado
Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );
const String code = "C0D3"; //codigo
String input_code;
//16x2 LCD display
LiquidCrystal lcd(A0, A1, A2, A3, A4, A5); //conectar a los pines del display LCD
byte symB0[8] = {0b11000,0b11000,0b00000,0b00000,0b00000,0b00000,0b11000,0b11000}; //simbolo 0
byte symB1[8] = {0b00011,0b00011,0b00000,0b00011,0b00011,0b00000,0b11011,0b11011}; //simbolo 1
byte symB2[8] = {0b11011,0b11011,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000}; //simbolo 2
byte symB3[8] = {0b11011,0b11011,0b00000,0b00011,0b00011,0b00000,0b11011,0b11011}; //simbolo 3
byte symB4[8] = {0b11011,0b11011,0b00000,0b11000,0b11000,0b00000,0b11000,0b11000}; //simbolo 4
byte symB5[8] = {0b11011,0b11011,0b00000,0b00011,0b00011,0b00000,0b00000,0b00000}; //simbolo 5
byte symB6[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b11011,0b11011}; //simbolo 6
byte symB7[8] = {0b11000,0b11000,0b00000,0b11000,0b11000,0b00000,0b11000,0b11000}; //simbolo 7
int cursor_row = 0;
int cursor_column = 0;
int msg[] = {0,1,2,3,4,1,5,5,6,7,2,5};
void setup(){
Serial.begin(9600);
input_code.reserve(15); //Maximo numero de caracteres de entrada: 16
lcd.createChar(0, symB0); //crear simbolo 0
lcd.createChar(1, symB1); //crear simbolo 1
lcd.createChar(2, symB2); //crear simbolo 2
lcd.createChar(3, symB3); //crear simbolo 3
lcd.createChar(4, symB4); //crear simbolo 4
lcd.createChar(5, symB5); //crear simbolo 5
lcd.createChar(6, symB6); //crear simbolo 6
lcd.createChar(7, symB7); //crear simbolo 7
lcd.begin(16, 2); //configurar numero de columnas y filas del display LCD
lcd.setCursor(0, 0); //poner el cursor en la columna 0, fila 0 (primera columna de la primera fila)
lcd.print("Teclee codigo"); //imprimir mensaje en la fila 1 del display LCD
lcd.setCursor(0, 1); //poner el cursor en la columna 0, fila 1 (primera columna de la segunda fila)
lcd.print("*:Del #:Enter"); //imprimir mensaje en la fila 2 del display LCD
}
void loop(){
char key = keypad.getKey();
if (key){
Serial.println(key);
if(key == '*') {
input_code = ""; //limpiar codigo de entrada
lcd.clear(); //limpiar display LCD y poner el cursor en la columna 0, fila 0 (primera columna de la primera fila)
cursor_row = 0;
cursor_column = 0;
} else if(key == '#') {
cursor_row = 0;
cursor_column = 0;
if(input_code == code) {
Serial.println("Codigo correcto");
lcd.clear(); //limpiar display LCD y poner el cursor en la columna 0, fila 0 (primera columna de la primera fila)
lcd.print("Codigo correcto"); //imprimir mensaje de codigo correcto en la fila 1 del display LCD
delay(2000); //esperar dos segundos
lcd.clear(); //limpiar display LCD y poner el cursor en la columna 0, fila 0 (primera columna de la primera fila)
for (int i = 0; i <= 11; i++) { //escribir simbolos mensaje
lcd.write((byte)msg[i]); //escribir simbolo i del mensaje
delay(500); //esperar medio segundo
cursor_column = cursor_column + 2;
if(cursor_column == 16) { //primera fila completa
cursor_column=0;
cursor_row = 1;
}
lcd.setCursor(cursor_column, cursor_row);
}
} else {
Serial.println("Codigo incorrecto");
lcd.clear(); //limpiar display LCD y poner el cursor en la columna 0, fila 0 (primera columna de la primera fila)
lcd.print("Cod. incorrecto"); //imprimir mensaje de codigo incorrecto en la fila 1 del display LCD
delay(2000); //esperar dos segundos
lcd.clear(); //limpiar display LCD y poner el cursor en la columna 0, fila 0 (primera columna de la primera fila)
lcd.print("Teclee codigo"); //imprimir mensaje en la fila 1 del display LCD
lcd.setCursor(0, 1); //poner el cursor en la columna 0, fila 1 (primera columna de la segunda fila)
lcd.print("*:Del #:Enter"); //imprimir mensaje en la fila 2 del display LCD
}
input_code = ""; //limpiar codigo de entrada
} else {
input_code += key; //concatenar nuevo caracter a la cadena de codigo de entrada
if(cursor_row == 0 && cursor_column == 0) { //introducir nuevo codigo
lcd.clear();
}
lcd.print(key);
cursor_column++;
}
}
}