// importa las bibliotecas necesarias
#include <Keypad.h> // Teclado matricial
#include <Wire.h> // protocolo I2C
#include <LiquidCrystal_I2C.h> // LCD
LiquidCrystal_I2C lcd ( 0x27, 16, 2 ); // Definimos el tamaño de la LCD (16 Columnas, 2 renglones)
// definimos el numero de filas del teclado
const uint8_t ROWS = 4;
// define numero de columnas
const uint8_t COLS = 4;
// definimos el numero de teclas del teclado
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 };
// creamos objeto con los parametros previamente configurados
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup() {
Serial.begin(9600);
lcd.init( ); //iniciamos LCD
lcd.backlight( ); // Prendemos la luz de fondo (si la tiene)
lcd.setCursor(0, 0); // Definimos la posición del mensaje (Columna, Renglon)
lcd.print("UdaVinci");
delay(1000);
lcd.clear(); //Limpiamos la LCD para el siguiente mensaje
lcd.print("tecla:"); // escribimos el siguiente mensaje
// Hay que recordar que cada que se escriba un mensaje nuevo
// se debe limpiar la pantalla o los mensajes nuevos se
//sobreponen al anterior y se pueden ver algunas letras del mismo.
}
void loop() {
// obtiene tecla presionada y asigna a variable
char key = keypad.getKey();
// comprueba que se haya presionado una tecla
if (key) {
Serial.println(key); // envia a monitor serial la tecla presionada
lcd.setCursor(0,1); // Siguiente renglon de la LCD
lcd.print (key); // imprimimos la letra del teclado en pantalla
delay(500);
}
}