// Definir pines para el teclado matricial 4x4
const int filas[4] = {13, 12, 14, 27}; // Pines conectados a las filas del teclado
const int columnas[4] = {26, 25, 33, 32}; // Pines conectados a las columnas del teclado
// Mapeo del teclado 4x4
char teclas[4][4] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'F', '0', 'E', 'D'}
};
// Definir pines para el display de 7 segmentos (4 dígitos)
const int segmentos[7] = {15, 2, 4, 5, 18, 19, 23}; // Pines para los segmentos a-g
const int digitos[4] = {22, 21, 34, 35}; // Pines para activar cada uno de los 4 dígitos
// Variables para almacenar los caracteres a mostrar en cada dígito
char display[4] = {' ', ' ', ' ', ' '};
byte segmentosCaracteres[16] = {0X3F, 0X06, 0X5B, 0X4F, 0X66, 0X6D, 0X7D,
0X07, 0X7F,0X6F, 0X77, 0X7C, 0X58, 0X5E, 0X71, 0X79};
void setup() {
// Configurar pines de segmentos como salidas
for (int i = 0; i < 7; i++) {
pinMode(segmentos[i], OUTPUT);
digitalWrite(segmentos[i], LOW);
}
// Configurar pines de dígitos como salidas
for (int i = 0; i < 4; i++) {
pinMode(digitos[i], OUTPUT);
digitalWrite(digitos[i], HIGH); // Apagar dígitos (inversión por multiplexado)
}
// Configurar pines de filas como entradas inicialmente
for (int i = 0; i < 4; i++) {
pinMode(filas[i], INPUT);
}
// Configurar pines de columnas como entradas con resistencia pull-up
for (int i = 0; i < 4; i++) {
pinMode(columnas[i], INPUT_PULLUP);
}
}
void loop() {
// Leer el teclado
char tecla = leerTeclado();
// Si se ha presionado una tecla
if (tecla) {
actualizarDisplay(tecla); // Actualizar el contenido del display
}
// Mostrar el contenido en el display (multiplexado)
for (int i = 0; i < 4; i++) {
mostrarCaracter(i, display[i]);
}
}