
O Arduino identifica na hora qual tecla você pressiona em um teclado de 12 teclas parecido com o de um telefone e a mostra na tela do computador. Os números, o asterisco e a cerquilha ficam em uma grade de linhas e colunas, que o Arduino verifica para encontrar a tecla pressionada. É o primeiro passo para projetos como uma fechadura com senha ou uma calculadora.
Vídeo
Esquema do circuito

Código-fonte
C++ (Arduino IDE)
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// Uso do teclado matricial 3x4
4// ─────────────────────────────────────────
5// A tecla pressionada no teclado 3x4 é lida e mostrada no Monitor Serial
6// (9600 baud). A biblioteca Keypad varre as linhas e as colunas.
7//
8// Pinos:
9// D8, D7, D6, D5 -> Linhas 1-4 do teclado
10// D4, D3, D2 -> Colunas 1-3 do teclado
11
12#include <Keypad.h>
13
14const byte ROWS = 4; // Número de linhas
15const byte COLS = 3; // Número de colunas
16
17// Layout do teclado
18char keys[ROWS][COLS] = {
19 {'1', '2', '3'},
20 {'4', '5', '6'},
21 {'7', '8', '9'},
22 {'*', '0', '#'}
23};
24
25byte rowPins[ROWS] = {8, 7, 6, 5}; // Pinos das linhas
26byte colPins[COLS] = {4, 3, 2}; // Pinos das colunas
27
28Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
29
30void setup() {
31 Serial.begin(9600);
32 Serial.println("Keypad Initialized...");
33}
34
35void loop() {
36 // Pega a tecla pressionada; NO_KEY se não houver
37 char pressedKey = keypad.getKey();
38
39 if (pressedKey != NO_KEY) {
40 Serial.print("Pressed Key: ");
41 Serial.println(pressedKey);
42 }
43}
44
Perguntas frequentes
Qual é a diferença entre os teclados matriciais 3x4 e 4x4?
O teclado 3x4 tem 3 colunas + 4 linhas (12 teclas); o 4x4 tem 4+4 (16 teclas). O 3x4 basta para projetos compactos; se precisar de teclas extras, como as letras (A, B, C, D), prefira o 4x4.
Como identificar a ordem dos pinos?
Confira a identificação na parte de trás do teclado ou a folha de dados. Geralmente são 7 pinos, da esquerda para a direita: ROW1, ROW2, ROW3, ROW4, COL1, COL2, COL3. No código, defina primeiro os pinos das linhas e depois os das colunas.
getKey() bloqueia a execução?
Não, `keypad.getKey()` não bloqueia a execução: retorna o caractere da tecla pressionada, se houver, ou `NO_KEY` (=0) caso contrário. Você pode chamar a função continuamente dentro do loop sem interromper outras tarefas.
