Lección 1.5: Teclado matricial
Un teclado de membrana permite introducir números y órdenes: la clave de una cerradura, un valor de consigna o la opción de un menú.
Material
Librerías
- Keypad
Cómo funciona
Las 16 teclas forman una cuadrícula de 4 filas y 4 columnas. Pulsar una tecla une su fila con su columna, de modo que bastan 8 cables en lugar de 16.
Para saber qué tecla está pulsada se hace un barrido: el programa activa una fila cada vez y mira qué columna responde. La librería Keypad lo hace por ti, y además filtra el rebote.
getKey() no espera: devuelve la tecla si hay una pulsación nueva, o un carácter nulo si no la hay, así que el loop() sigue libre para hacer otras cosas.
Conexiones
| Componente | Se conecta a | Nota |
|---|---|---|
| Teclado, cable 1 (fila 1) | Pin 9 | Contando desde la izquierda, con las teclas hacia ti |
| Teclado, cable 2 (fila 2) | Pin 8 | |
| Teclado, cable 3 (fila 3) | Pin 7 | |
| Teclado, cable 4 (fila 4) | Pin 6 | |
| Teclado, cable 5 (columna 1) | Pin 5 | |
| Teclado, cable 6 (columna 2) | Pin 4 | |
| Teclado, cable 7 (columna 3) | Pin 3 | |
| Teclado, cable 8 (columna 4) | Pin 2 |
Código
// Escribe cada tecla y comprueba una clave de cuatro dígitos.
#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
const String SECRET = "1234";
String input = "";
void setup() {
Serial.begin(9600);
Serial.println("Escribe la clave y pulsa #");
}
void loop() {
char key = keypad.getKey();
if (!key) return; // ninguna tecla nueva
Serial.print(key);
if (key == '#') {
Serial.println(input == SECRET ? " -> correcta" : " -> incorrecta");
input = "";
} else if (key == '*') {
input = "";
Serial.println(" -> borrada");
} else {
input += key;
}
}Qué hace el código
- keys es el mapa de la cuadrícula: lo que hay escrito en cada tecla, fila a fila.
- makeKeymap() convierte esa matriz en el formato que espera la librería.
- getKey() devuelve 0 cuando no hay pulsación nueva, por eso if (!key) return; sale del loop() sin hacer nada.
- # confirma la clave y * la borra, como en un teléfono.
Paso a paso
- Instala la librería «Keypad», de Mark Stanley y Alexander Brevig, desde el gestor de librerías.
- Conecta los ocho cables del teclado según la tabla.
- Sube el código y abre el monitor serie a 9600 baudios.
- Pulsa 1, 2, 3, 4 y #.
Resultado
Cada tecla aparece en el monitor serie y, al pulsar #, se indica si la clave es correcta.
Si no funciona
- Si aparecen teclas equivocadas, filas y columnas están cruzadas: invierte el orden de rowPins o de colPins.
- Si una fila o una columna entera no responde, revisa ese cable: el conector plano se suelta con facilidad.