¿Qué es un teclado matricial 3×4?
Un teclado matricial 3×4 es un dispositivo de entrada compuesto por 12 teclas organizadas en 3 columnas y 4 filas. Se utiliza ampliamente en proyectos con Arduino, ESP32, Raspberry Pi y otros sistemas embebidos. Su diseño matricial permite reducir el número de pines necesarios a solo 7.
Cómo funciona internamente
El teclado está formado por una matriz de interruptores. Cada tecla conecta una fila con una columna cuando se presiona. No contiene electrónica activa; solo contactos momentáneos.
Distribución típica de teclas:
| Fila/Columna | C1 | C2 | C3 |
|---|---|---|---|
| R1 | 1 | 2 | 3 |
| R2 | 4 | 5 | 6 |
| R3 | 7 | 8 | 9 |
| R4 | * | 0 | # |
Distribución del conector de 2.54 mm
Los teclados de membrana 3×4 suelen traer un conector de 7 pines con paso de 2.54 mm.
La distribución más común es:
- R1
- R2
- R3
- R4
- C1
- C2
- C3
Puede variar según el fabricante, pero esta es la más usada en módulos comerciales.
Materiales de construcción
Los teclados matriciales de membrana están hechos de:
- Capa frontal de PET (polietileno tereftalato), flexible y resistente.
- Pistas internas de tinta conductiva (carbono o plata).
- Capa adhesiva posterior para montaje.
- En modelos rígidos, las teclas suelen ser de plástico ABS.
Uso con Arduino
Para usarlo con Arduino se conectan las 4 filas y 3 columnas a pines digitales. Arduino escanea las líneas para detectar qué tecla se presiona.
La librería más utilizada es Keypad.h, que facilita:
- Definir la matriz de teclas.
- Leer teclas presionadas.
- Manejar rebotes.
Uso en otras plataformas
- ESP32 / ESP8266: Compatible con la misma librería Keypad.
- Raspberry Pi: Se usa mediante GPIO y librerías como pad4pi en Python.
- Microcontroladores PIC, AVR, STM32: Se implementa un escaneo por software.
Aquí tienes un programa completo para Arduino que:
- Lee un teclado matricial 3×4
- Va almacenando los números presionados en una variable tipo String
- Los muestra en un LCD I2C en tiempo real
Todo está listo para copiar y pegar.
Código Arduino: Teclado 3×4 + LCD I2C
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Configuración del LCD I2C (dirección típica 0x27)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Definición del teclado 3x4
const byte FILAS = 4;
const byte COLUMNAS = 3;
char teclas[FILAS][COLUMNAS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte pinesFilas[FILAS] = {9, 8, 7, 6}; // Ajusta según tu conexión
byte pinesColumnas[COLUMNAS] = {5, 4, 3}; // Ajusta según tu conexión
Keypad teclado = Keypad(makeKeymap(teclas), pinesFilas, pinesColumnas, FILAS, COLUMNAS);
// Variable donde se guardan los números
String bufferNumeros = "";
void setup() {
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Teclado 3x4");
lcd.setCursor(0,1);
lcd.print("Listo...");
delay(1500);
lcd.clear();
}
void loop() {
char tecla = teclado.getKey();
if (tecla) {
// Si la tecla es un número, lo agregamos al buffer
if (isDigit(tecla)) {
bufferNumeros += tecla;
}
// Si se presiona #, se limpia la variable
if (tecla == '#') {
bufferNumeros = "";
}
// Mostrar en LCD
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Entrada:");
lcd.setCursor(0,1);
lcd.print(bufferNumeros);
}
}
Cómo funciona
- Cada vez que presionas un número, se agrega a la variable bufferNumeros.
- El LCD muestra el contenido actualizado.
- Si presionas #, se borra todo.
- El * no hace nada en este ejemplo, pero puedes asignarle funciones.