Un teclado matricial 4×4 con Arduino puede controlar actuadores mediante alguna combinación de teclas, como por ejemplo abrir una cerradura mediante una contraseña, cambiar la velocidad de un motor mediante un menú, el típico proyecto de una calculadora con Arduino, etc.
En el mundo de la electrónica existe una gran infinidad de teclados matriciales, pero existen básicamente de cualquier configuración, incluso armar estos tipos de teclados es sencillo ya que solo están formados por una serie de pulsadores y resistencias interconectados entre sí de manera matricial.
Normalmente estos teclados matriciales 4×4 trabajan con 8 hilos de conexión pero podremos manejar 16 pulsadores con la ayuda de Arduino, si es de 3×4 necesitaremos 7 hilos y podremos manejar hasta 12 pulsadores.
También podemos controlarlo con un solo hilo de conexión, esto se logra haciendo un divisor de voltaje y asignándole un voltaje pequeño para cada pulsador del teclado matricial 4×4, este método es muy sencillo y se presentara un ejemplo práctico en próximos artículos de Arduino.
¿Cómo trabaja un teclado matricial 4×4 con Arduino?
Estos teclados tienen filas y columnas conectados entre si formando una matriz de pulsadores.
Para acceder a alguna de estas intersecciones tendremos que identificarlos de alguna manera, por ejemplo si quisiéramos identificar el pulsador conectado en la fila uno y columna dos, esto lo podemos lograr poniendo la primera fila a 1 lógico y la segunda fila a un 0 lógico al presionar el pulsador enviara 1 lógico de la fila hacia la columna esto nos daría la certeza para saber que pulsador fue presionado, y gracias a esto nos permite detectar cualquier tecla que se haya pulsado.

Configuración del teclado matricial 4×4
Entender la configuración y disposición de sus filas y columnas de estos teclados matriciales 4×4 es vital para su buen manejo.

Librería para manejar teclados matriciales en Arduino
Controlar teclados matriciales si se tiene conocimiento amplio sobre programación se la puede manejar sin la necesidad de ninguna librería realizando nuestras propias funciones, si no tienes estos conocimientos sobre programación ya existe múltiples librerías de la comunidad de Arduino que nos ayudara a utilizar estos teclados matriciales con Arduino.
La librería “keypad.h” la podemos instalar directamente desde el IDE de Arduino, accediendo desde el menú a Herramientas >> Administrar Bibliotecas >> [Buscar keypad]

Uso de la librería <keypad.h>
Esta librería ya tiene varias funciones programadas, pero antes de usarla debemos incluirla a nuestro código escribiendo la siguiente instrucción #include <keypad.h> en la cabecera, además se debe incluir de una serie de instrucciones:
#include <keypad.h>
Configuramos la filas y columnas del keypad
Debemos definir el numero de filas y columnas que tiene el teclado que vayamos a usar, en este caso es un teclado matricial de 4×4, ademas se debe asignar un valor para cada tecla del teclado en una matriz NxM.

Configuramos los pines de las filas y columnas
Debemos designar los pines que vamos a usar para conectar las filas y columnas.
byte pinesFilas[filas] = { 13, 12, 11, 10 };
byte pinesColumnas[columnas] = { 9, 8, 7, 6 };
Constructor
Una vez realizada todos los pasos anteriores recién podremos asignar los parámetros necesarios del constructor que son:
- Teclas del teclado matricial,
- Filas,
- Columnas,
- numero de filas y columnas.

Funciones de la librería <Keypad.h> para manejar teclados matriciales en Arduino
Saber usar estas funciones es muy importante para sacar el máximo potencial a esta librería, a continuación se hace una descripción de estas funciones.
begin (makeKeymap (userKeymap))
Útil cuando necesitamos asignar varios valores a una misma tecla

waitForKey ()
Con esta función podemos bloquear todo hasta que se presione una tecla, sin que las interrupciones quedes anuladas en caso que lo estemos usando.
getKey()
Esta función es la más usada, nos devuelve el valor guardado dentro una matriz NxM.
getState()
Nos permite saber el estado de las teclas, tienen cuatros estados IDLE (inactivo), PRESSED (presionado), RELEASED (liberado) y HOLD (retenido).
keyStateChanged()
Útil cuando deseamos determinar algún cambio de estado de una tecla.
setHoldTime(tiempo)
Esta función tiene un parámetro tiempo que se debe establecer en milisegundos con un número entero y sin signo, esta función puede determinar el tiempo que debe estar presionado una tecla para que pase al estado HOLD.
setDebounceTime (tiempo)
Con esta función podemos controlar el tiempo de espera para poder realizar una nueva pulsación de otra tecla de nuestro teclado matricial en Arduino.
Para declarar el tiempo debemos hacerlo en milisegundos.
addEventListener (keypadEvent)
Útil para trabajar con eventos, esta función se la debe declarar dentro la función setup()