1. El Octavo Bit
  2. / Arduino
  3. / Modulos y sensores
  4. / Teclados matriciales

Teclados matriciales

| Actualizado:
Comentarios: 0

Teclados matriciales
Teclados matriciales

Los teclados son una excelente manera de permitir que los usuarios interactúen con sus proyectos. Se pueden usar para navegar por los menús, introducir contraseñas o controlar los juegos y robots.

Básicamente un teclado matricial está compuesto por pulsadores organizados en filas y columnas formando una matriz.

¿Cómo funciona un teclado matricial?

Las teclas de un teclado están organizadas en filas y columnas. Existen múltiples teclados con diferente número de teclas, siendo los más habituales las configuraciones de 3×3, 3×4 y 4×4.

Este tipo de teclados están constituidos por 3 membranas superpuestas, dos membranas con material conductor y una en medio no conductora, para separarlas. En condiciones normales, el interruptor se encuentra abierto, pero al presionar la tecla, la membrana superior e inferior entran en contacto permitiendo la circulación de la corriente.

El esquema de conexión de un teclado 4×4 sería:

Esquema de conexión de un teclado 4x4

Como podemos observar los pulsadores están distribuidos en filas y columnas. Para detectar la pulsación de una tecla tendremos que conocer la posición (X, Y). Por ejemplo, la tecla del número 5 corresponde a la fila 2 y columna 2, por lo que se encuentra en la posición (2,2).

Configuración de un teclado matricial para Arduino

Conexión con Arduino.

Esquema:

Para el montaje, conectamos todos los pines a las salidas digitales de Arduino, por ejemplo, el esquema nos podría quedar de la siguiente forma:

Conexión de un teclado matricial 4x4 con Arduino

Código sin utilizar librería:

byte pinesFilas[] = {11,10,9,8}; 
byte pinesColumnas[] = {7,6,5,4};
const byte numeroFilas = 4;
const byte numeroColumnas = 4;
char teclas[4][4] = {{'1','2','3','A'}, 
                     {'4','5','6','B'}, 
                     {'7','8','9','C'}, 
                     {'*','0','#','D'}};
void setup(){
  for (int nF = 0; nF < numeroFilas; nF++) {
     pinMode(pinesFilas[nF], OUTPUT);
     digitalWrite(pinesFilas[nF], HIGH);
  }

  for (int nC = 0; nC < numeroColumnas; nC++) {
     pinMode(pinesColumnas[nC], INPUT_PULLUP);
  } 
   
  Serial.begin(9600);
  Serial.println("Teclado 4x4");
  Serial.println();
}
 
void loop(){
    for (int nF = 0; nF < numeroFilas; nF++){
      digitalWrite(pinesFilas[nF], LOW);
      for (int nC = 0; nC < numeroColumnas; nC++) {
        if (digitalRead(pinesColumnas[nC]) == LOW){
          Serial.print("Tecla: ");
          Serial.println(teclas[nF][nC]);
          while(digitalRead(pinesColumnas[nC]) == LOW){}
        }
      }
      digitalWrite(pinesFilas[nF], HIGH);
    }
   delay(10);
}

Código utilizando la librería Keypad:

#include "Keypad.h"
 
const byte filas = 4;
const byte columnas = 4;
 
char botones[filas][columnas] = {
   { '1','2','3', 'A' },
   { '4','5','6', 'B' },
   { '7','8','9', 'C' },
   { '#','0','*', 'D' }
};
 
const byte pinesFilas[filas] = { 11, 10, 9, 8 };
const byte pinesColumnas[columnas] = { 7, 6, 5, 4 };
 
Keypad teclado = Keypad(makeKeymap(botones), pinesFilas, pinesColumnas, filas, columnas);
 
void setup() {
   Serial.begin(9600);
   Serial.println("Teclado 4x4");
   Serial.println();
}
 
void loop() {
   char tecla = teclado.getKey();
 
   if (tecla) {
      Serial.print("Tecla: ");
      Serial.println(tecla);
   }
}

Artículos que te pueden interesar

Puntero láser, módulo KY-008
Módulo Sensor Láser KY-008 (Puntero láser)

Módulo Sensor Láser KY-008 (Puntero láser)

| Actualizado:
Comentarios: 0

El módulo KY-008 es un emisor de luz láser de color rojo y que cuenta con un pin de alimentación (S), un pin GND (-) y un tercer pin central que no sirve para nada. Características: Modo de salida: punto…

Modulo sensor de agua
Sensor de agua

Sensor de agua

| Actualizado:
Comentarios: 0

Módulo que detecta el nivel de agua del recipiente donde se sumerge. Para usar en tus proyectos Arduino. El nivel de agua es detectado por las bandas paralelas que tiene en la placa, y según el nivel de agua, genera…

Módulo controlador de motores L298N

Módulo controlador de motores L298N

| Actualizado:
Comentarios: 0

El módulo controlador de motores L298N H-bridge nos permite controlar la velocidad y la dirección de dos motores de corriente continua o un motor paso a paso, de una forma muy sencilla gracias a los 2 los dos H-bridge que…

Módulo reloj de tiempo real RTC DS3231

Módulo reloj de tiempo real RTC DS3231

| Actualizado:
Comentarios: 0

El DS3231 es un reloj de tiempo real (RTC) I2C de bajo coste y extremadamente preciso, con un oscilador de cristal con compensación de temperatura (TCXO). Comparado con el DS1302, el DS3231 tiene muchas ventajas, funciona con una alimentación que…

Comentarios - 0

Deja un comentario

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