Teclado matricial 4×4 en ESP32
En este tutorial vamos a ingresar datos desde un teclado matricial 4×4 en ESP32, pero primero analicemos que es un teclado matricial 4×4:
¿Que es un teclado matricial 4×4?
Un teclado matricial 4×4 es un dispositivo que contiene un conjunto de botones (pulsadores) ocultos en una membrana de plástico que permite ser presionados.
Un teclado matricial 4 x 4 internamente contiene un grupo de 4 filas y 4 columnas que se conectan internamente como se muestra en esta imagen:

Requerimientos:
- ESP32.
- Teclado matricial 4×4.
- Cables.
Conexiones:
| Teclado | ESP32 |
| C4 | D15 |
| C3 | D2 |
| C2 | D4 |
| C1 | D16 |
| R4 | D17 |
| R3 | D5 |
| R2 | D18 |
| R1 | D19 |

Código:
// importa libreria Keypad
#include <Keypad.h>
// define numero de filas
const uint8_t ROWS = 4;
// define numero de columnas
const uint8_t COLS = 4;
// define la distribucion de teclas
char keys[ROWS][COLS] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
// pines correspondientes a las filas
uint8_t colPins[COLS] = { 16, 4, 2, 15 };
// pines correspondientes a las columnas
uint8_t rowPins[ROWS] = { 19, 18, 5, 17 };
// crea objeto con los prametros creados previamente
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup() {
Serial.begin(115200);
}
void loop() {
// obtiene tecla presionada y asigna a variable
char key = keypad.getKey();
// comprueba que se haya presionado una tecla
if (key) {
// envia a monitor serial la tecla presionada
Serial.println(key);
}
}
Código y diagrama: https://wokwi.com/projects/343680359630635604
Librerías del teclado: https://github.com/Chris–A/Keypad

🎦 Este curso: https://www.youtube.com/watch?v=VuJkqL2Ys3Y&list=PLCTD_CpMeEKTvjzabAvLGHakg-ql6t0q6&ab_channel=ProgramadorNovato
🎦 Curso de Arduino: https://www.youtube.com/watch?v=oGinJt9aALc&list=PLCTD_CpMeEKSqw3Nh7rA9aXUAzbPIPkdv&ab_channel=ProgramadorNovato
🎦 [CURSO] C++ DE 0 A HEROE: https://www.youtube.com/watch?v=APN8aCyPvww&list=PLCTD_CpMeEKTofxs7iottRxJ5YPM7BOcc