Saltar al contenido
Contenido de Arduino

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

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

ComponenteSe conecta aNota
Teclado, cable 1 (fila 1)Pin 9Contando 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

  1. Instala la librería «Keypad», de Mark Stanley y Alexander Brevig, desde el gestor de librerías.
  2. Conecta los ocho cables del teclado según la tabla.
  3. Sube el código y abre el monitor serie a 9600 baudios.
  4. 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.