En este proyecto interactuaremos con el Arduino a través de un teclado matricial 4×4, vamos a aprender a identificar por monitor serial la tecla presionada.
Teclado matricial 4×4
El teclado matricial es un dispositivo compuesto por varios pulsadores ubicados como un arreglo o matriz, conectados en filas y columnas, por lo que puede ser leído por una menor cantidad de pines a los necesarios para leerlos de forma individual, por ejemplo un teclado matricial de 4×4 usaremos 8 pines para leerlo. Ciertamente existen una gran variedad de teclados matriciales, 1×4, 3×3, 4×3, 4×4, etc.
En nuestro caso vamos a utilizar un teclado matricial 4×4 de membrana, o sea que usa 4 pines para leer las filas y 4 pines para leer las columnas
Tal como vemos en la imagen anterior los primeros 4 pines son los que controlan las filas y los 4 últimos son las columnas.
Componentes
Las conexiones de este proyecto son bastante sencillas, lo primero que debemos que tener en cuenta es que los pines del teclado se enumeran específicamente de izquierda a derecha y solo debemos conectar los pines del teclado a los del Arduino tal como lo indica la siguiente tabla:
Pin Teclado | Pin Arduino |
---|---|
1 | 9 |
2 | 8 |
3 | 7 |
4 | 6 |
5 | 5 |
6 | 4 |
7 | 3 |
8 | 2 |
Instalando la librería Keypad.h
Para utilizar nuestro teclado 4×4, podemos crear todo el código o en su lugar podemos utilizar una librería ya creada y lista para este fin. Existen varias librerías para interactuar con los teclados matriciales, nosotros vamos a utilizar la creada por Mark Stanley y Alexander Brevig, la cual la podemos descargar de este enlace y copiarla manualmente en la capeta de librerías o lo podemos hacer utilizando el IDE de Arduino, tal como lo podemos ver a continuación.
La instalación de la biblioteca, es bastante simple, lo primero es ir al menú Programa> Incluir Librería> Administrar bibliotecas, aquí hay que esperar un poco a que se actualice el indice librerías o bibliotecas instaladas.
Una vez termine de actualizar vamos al cuadro de búsqueda y digitamos «keypad». Nos aparecerían varios resultados, pero seleccionamos las que se llama «Keypad» de Mark Stanley, Alexander Brevig y le damos instalar.
Código
#include <Keypad.h> const byte FILAS = 4; const byte COLUMNAS = 4; char keys[FILAS][COLUMNAS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; const byte pinesFilas[FILAS] = {9,8,7,6}; const byte pinesColumnas[COLUMNAS] = {5,4,3,2}; Keypad teclado = Keypad(makeKeymap(keys), pinesFilas, pinesColumnas, FILAS, COLUMNAS); void setup() { Serial.begin(9600); } void loop() { char tecla = teclado.getKey(); if (tecla) { Serial.println(tecla); } }
Explicación del código
Comenzaremos a revisar el código, primero vamos la inclusión de la librería y las declaraciones de las variables.
#include <Keypad.h>
Por medio de esta línea lo que hacemos es incluir la librería en nuestro proyecto, la cual debió de ser instalada previamente en nuestro IDE de Arduino.
const byte FILAS = 4; const byte COLUMNAS = 4;
Además establecemos 2 constantes del tipo byte, la primera constate la utilizamos para almacenar el número de filas de nuestra matriz y la segunda es la que utilizaremos para almacenar en número de filas de nuestra matriz.
char keys[FILAS][COLUMNAS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} };
Creamos una matriz de caracteres cuyas dimensiones de del tamaño de nuestras dos constantes anteriores, es decir de 4×4, que es el tamaño de nuestro teclado matricial, en esta matriz vamos a guardar los valores que tiene cada una de las teclas de nuestro teclado.
const byte pinesFilas[FILAS] = {9,8,7,6}; const byte pinesColumnas[COLUMNAS] = {5,4,3,2};
Creamos dos arreglos o vectores, el primero con los pines del Arduino que vamos a asociar para las filas y el segundo con los pines que vamos a asociar con las columnas.
Keypad teclado = Keypad(makeKeymap(keys), pinesFilas, pinesColumnas, FILAS, COLUMNAS);
Por último, creamos una instancia del objeto keypad, al cual le asignamos la matriz de las teclas , la cantidad de filas, de columnas y los pines del Arduino que vamos utilizar para las filas y las columnas.
Función setup()
Serial.begin(9600);
Como hemos visto anteriormente en otros proyectos en el setup ponemos todo lo que debe ser inicializado o ejecutado una sola vez, el el caso de este proyecto único que vemos es la inicialización de la comunicación serial a una velocidad el 9600 baudios, por medio de la cual veremos la información de la tecla que hemos presionado a través del monitor serial.
Normalmente en nuestros otros proyectos utilizamos la función PinMode() para configurar los pines del Arduino, ya sea de entrada o de salida pero en este ejemplo no lo hacemos ya que la librería Keypad lo hace por nosotros.
Función loop()
char tecla = teclado.getKey(); if (tecla) { Serial.println(tecla); }
La primera línea del loop() leemos la tecla que haya sido presionada , luego tenemos la condicional if que verifica si se ha presionado alguna tecla y si es cierto imprime la tecla presionada en el monitor serial.
Resumen
En resumen al conectar nuestro Arduino a la computadora e iniciamos el monitor serial, comenzaremos a interactuar con él a través de un teclado matricial de 4×4, a medida que presionamos alguna tecla irá apareciendo su valor en el monitor serial.