Saltar al contenido

Teclado Matricial

Hola controleros y controleras en el día de hoy vamos a aprender a usar el Teclado Matricial con ARDUINO, y veremos cómo podremos emplear lo aprendido en cualquier tipo de teclado, por ejemplo un teclado matricial 4×4 o un teclado matricial 4×3 Arduino.

Antes de comenzar, te hago la invitación para que veas nuestro CURSO GRATIS DE ARDUINO.

Teclado Matricial Arduino

El teclado matricial es un dispositivo bastante común en proyectos con sistemas microcontrolados como el Arduino y está conformado básicamente por un arreglo de pulsadores distribuidos en forma de matriz, que puede ser leído utilizando pocos pines del Arduino, utilizando el concepto de la multiplexación (el mismo que vimos en la entrada del Display 7 Segmentos con Arduino).

En el mercado podemos encontrar Teclados matriciales de diferentes tamaños, como el teclado matricial 4×4, 3×3, 4×3, entre otros. Estos teclados pueden tener una estructura de membrana o una estructura rigida.

Teclados Matriciales de Membrana
Teclados Matriciales de Membrana

Incorporar Teclados Matriciales a nuestros proyectos con Arduino es bastnate interesante debido a que puede ser empleado en proyectos que requieran la inserción de datos por parte del usuario, como por ejemplo hacer una calculadora con arduino y teclado matricial, pedir una contraseña con arduino, mover un servo con teclado matricial, usar teclas de dirección para un robot, cnc, solicitar parámetros numéricos para nuestros proyectos, solicitar información específica, entre otros.

Funcionamiento del Teclado de Arduino

Para ingresar valores con un teclado matricial en Arduino seguiremos los siguientes pasos.

Por la configuración en matriz que presentan los pulsadores dentro de un teclado matricial, se puede establecer cual botón dentro del arreglo está siendo presionado de la siguiente forma:

Teclado telefonico pic 16f887
10. Manejo de Teclado Telefónico

Vamos primero a suponer que tenemos un arreglo Matricial 4×3 o teclado arduino 4×3 (el funcionamiento es el mismo para otro tipo de teclado). Donde internamente la distribución de los botones es así:

Teclado Matricial 4x3

Para programar el Teclado o Keypad en Arduino o en cualquier otro microcontrolador, basta con seguir en orden la siguiente secuencia:

  1. Inicialmente conectamos el teclado matricial en los PINES DIGITALES del ARDUINO. Para eso será importante poder identificar cuales son las columnas y las filas del teclado.
  2. Las Filas del Teclado estarán conectadas en PINES DIGITALES configurados como SALIDAS.
  3. Las Columnas del Teclado estarán conectadas en PINES DIGITALES configurados como ENTRADAS y con el PULLUP activado (por lo tanto, estas entradas siempre estarán recibiendo un 1 lógico, si ningún botón es presionado).
  4. Configuramos TODAS las SALIDAS (Filas) en 1 lógico o 5v, es decir vamos a dejarlas encendidas.
  5. Aplicamos el concepto de la MULTIPLEXACIÓN: Aquí vamos a mandar un 0 lógico por cada fila y vamos a leer todas las columnas, si se detecta que alguna columna recibió el cero lógico, indica que el botón que comparte la fila y la columna fue presionado, en caso contrario vuelvo a colocar la fila en 1 lógico y verifico la siguiente fila.

En la siguiente animación podemos ver como se establece el presionado de un botón sobre el keypad. Notarás más adelante, que cuando se programa el teclado sin librería, basicamente usamos el teclado matricial con for (ciclo) para poder preguntar por las columnas del teclado.

Teclado Matricial Animado

Librería Keypad de Arduino

Una forma rápida de usar un Teclado con Arduino, es valernos de su librería Keypad, bastante sencilla de entender, para el caso de un teclado matricial 4×4 (KEYPAD 4×4) tenemos:

TECLADO MATRICIAL 4X4
  1. Incluimos la librería en nuestro proyecto:
#include <Keypad.h>
  • Establecemos 2 constantes que determinan el número de filas y columnas del teclado matricial
const byte rowsCount = 4;
const byte columsCount = 4;
  • Establecemos el Arreglo que nos dará los caracteres de cada uno de los botones del teclado matricial.
char keys[rowsCount][columsCount] = {
   { '1','2','3', 'A' },
   { '4','5','6', 'B' },
   { '7','8','9', 'C' },
   { '#','0','*', 'D' }
};
  • Creamos dos vectores donde colocaremos los Pines del Arduino asociados a las Filas y Columnas del teclado matricial:
const byte rowPins[rowsCount] = { 11, 10, 9, 8 };
const byte columnPins[columsCount] = { 7, 6, 5, 4 };
  • Creamos el objeto de la instancia Keypad con las variables creadas en el paso 2 y 3
Keypad keypad = Keypad(makeKeymap(keys), rowPins, columnPins, rowsCount, columsCount);

NOTA: No es necesario configurar los pines conectados al teclado usando el pinMode, porque ya la propia librería del Keypad lo hace internamente.

Para leer cual tecla fue presionada usamos la siguiente instrucción:

char key = keypad.getKey();

Ejemplo del Teclado Matricial Arduino

Es hora de comenzar a realizar proyectos de teclado matricial con Arduino, y una vez finalices este proyecto estarás en la capacidad por ejemplo de crear otro proyecto usando un menu con teclado matricial y Arduino.

Vamos a ver como utilizar este periferico con Arduino, de dos formas, una será programando el Arduino y la otra será utilizando la librería Keypad

Vamos a ingresar valores con el teclado matricial y Arduino para visualizar las teclas presionadas por el puerto Serial, usando el siguiente circuito:

Teclado Arduino

>> DESCARGAR COMPILADOS Y ARCHIVO PROTEUS 8 <<

Librería

#include <Keypad.h>
const byte filas = 4; 
const byte columnas = 4;
byte pinesFilas[]  = {9,8,7,6};
byte pinesColumnas[] = {5,4,3,2};
char teclas[4][4] = {{'1','2','3','A'},
                     {'4','5','6','B'},
                     {'7','8','9','C'},
                     {'*','0','#','D'}};
Keypad teclado1 = Keypad( makeKeymap(teclas), pinesFilas, pinesColumnas, filas, columnas);  
void setup() {
  Serial.begin(9600);
  Serial.println("Teclado 4x4 con Biblioteca Keypad");
  Serial.println();
}
void loop() {
  //Verifica si alguna tecla fue presionada
  char tecla_presionada = teclado1.getKey();
  
  //Monitor Serial
  if (tecla_presionada)
  {
    Serial.print("Tecla: ");
    Serial.println(tecla_presionada);
  } 
}

Sin Librería

byte pinesFilas[] = {9,8,7,6}; 
byte pinesColumnas[] = {5,4,3,2}; 
char teclas[4][4] = {{'1','2','3','A'}, 
                     {'4','5','6','B'}, 
                     {'7','8','9','C'}, 
                     {'*','0','#','D'}};
void setup()
{
  for (int nL = 0; nL <= 3; nL++) {
     pinMode(pinesFilas[nL], OUTPUT);
     digitalWrite(pinesFilas[nL], HIGH);
  }
  for (int nC = 0; nC <= 3; nC++) {
     pinMode(pinesColumnas[nC], INPUT_PULLUP);
  } 
   
  Serial.begin(9600);
  Serial.println("Teclado 4x4");
  Serial.println();
}
 
void loop()
{
    //Barrido por las filas
    for (int nL = 0; nL <= 3; nL++)
    {
      digitalWrite(pinesFilas[nL], LOW);
      
      //Barrido en columnas buscando un LOW
      for (int nC = 0; nC <= 3; nC++) {
        if (digitalRead(pinesColumnas[nC]) == LOW)
        {
          Serial.print("Tecla: ");
          Serial.println(teclas[nL][nC]);
          while(digitalRead(pinesColumnas[nC]) == LOW){}
        }
      }
      digitalWrite(pinesFilas[nL], HIGH);
    }
   delay(10);
}

Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:

👉 Invitar a Sergio a un Café ☕️

Que esten muy bien, nos vemos en la siguiente entrada.

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Comentarios (15)

Hola Cómo estás .necesito uno programa como ese k hicisteis,pero con 5 filas y 8 columnas. Y te regalo 200 cafés 😂😂serio lo nesecito si puedes me los haces y yo te pago. Te puse mi correo debajo

Responder

hola como estas?cual es la diferencia entre sin libreria o con libreria.yo nesecito hacer uno para un teclado de 5 por 9,si me podrias ayudar yo te pago por ,

Responder

No hay diferencias entre si hacerlo con librería o sin librería. Lo hago de esa manera es solo para mostrar el concepto de como trabaja el teclado. No simplemente usar una librería sin entender como ella funciona por dentro. Entendiendo eso, puedes desarrollar un proyecto con cualquier tipo de teclado.

Responder

Sergio felicitaciones por tu contenido, es excelente.
Amigo por casualidad tienes algún post en donde hagas toda la conexión a un wemos D1 R2 con tu teclado matricial 4×4 agradrzco si lo tienes.

Responder

Hola Nelson, por el momento no lo he realizado. Espero consigas ejecutar tu proyecto. Éxitos.

Responder

Hola Sergio como estas?nesecito una ayuda para hacer un Codigo para un teclado material con Arduino ,pero 5 linias y 8columnas o al menos 5 linias y 4 columnas. Si me puedes ayuda,contactame ,[email protected] y me dices cuanto por tu tiempo

Responder

Hola.

Una dudas. Yo quiero programar un teclado con las flechas de movimiento y con las teclas de reproducción de música. Como lo podría lograr?.

Gracias de nada.

Responder

Cordial saludo, espero se encuentren muy bien.
Como puedo hacer para utilizar varias claves validas

Responder

Desarrollar un sistema electrónico que permita satisfacer las siguientes condiciones:
• El sistema debe ser capaz de controlar la velocidad de giro de un motor.
• La velocidad debe ser controlada por un sensor de temperatura y un teclado matricial para
establecer el ciclo útil inicial.
• El teclado establece la velocidad inicial así:
Tecla Ciclo Útil
1 10%
2 20%
3 30%
4 40%
5 50%
6 60%
7 70%
8 80%
9 90%
• Si la temperatura es inferior a 30oC el ciclo útil debe reducirse a la mitad del valor original.
Deben montar la simulación apropiada y desarrollar el programa en IDE Arduino.

Responder

hola, como podría implementar esto:
Realizar un programa en arduino que por medio del teclado matricial de 4×4 ingrese un clave de 4 dígitos la cual se debe comprar un una clave previamente definida en su programa de tal forma que si la clave ingresada es ingresada incorrectamente 3 veces se debe activar una alerta (puede ser un buzzer o bien un led parpadeante rojo) en ese momento se deb solicitar el ingreso de la contraseña del administrador la cual también consta de 4 digitos y de igual manera se debe comparar con la contraseña de administrador previamente definida en su programa, hasta que la contraseña sea ingresada correctamente se debe desactivar la alarma y el usuario no administrador podrá intentar nuevamente ingresar su contraseña si ésta es exitosa se debe mostrar un mensaje en el monitor serial indicando que se ha ingresado correctamente y si no mostrar el mensaje que la contraseña es incorrecta y repetir el ciclo si vuelve a ingresar incorrecta la contraseña 3 veces.

Responder

En esta entrada hay un ejemplo similar en el cual te puedes basar. Debes hacer todas las modificaciones para adaptarlo a tu tarea: https://controlautomaticoeducacion.com/arduino/eeprom-con-arduino/

Responder

Hola cómo estás? Te cuento que estoy iniciando en este mundo y realizando un pequeño proyecto con un teclado 4×4 y una pantalla LCD 16×2. Quería saber cómo podría agregarle un dato al presionar un número. Por ejemplo, al presionar el 1 que en la LCD se observe un nombre por ejemplo Walter. Espero haber sido claro.
Desde ya muchas gracias.

Responder

Walter pues debes emplear condicionales que hagan la pregunta. Inicialmente almacenas el valor digitado por el teclado en una variable tipo char y posteriormente realizas la pregunta con un condicional.

if(caracter == ‘1’){
lcd.print(«Walter»);
}

Te puede servir ver nuestra entrada de LCD con Arduino.

Responder

Y como podría hacer para borrar un dato ? Ayúdeme porfavor 🙁 *sin usar libreria*

Responder

borrar un dato de donde?

Responder