/*----------------------------------------------------------------------
---------------------- TECLADO MATRICIAL 4X4 ---------------------------
Ejericicio desarrollado para el curso de Sistemas Digitales B - 1IEE28
Pontificia Universidad Católica del Perú. Semestre académico 2025-I
El teclado (conectado a un puerto serial) sirve para enviar los grados a girar desde
0 a 360 grados, más el sentido de giro (A: horario) y (B antihorario), luego debe pulsar
la tecla D como enter. Es decir, si deseo que el motor conectado a otro puerto serial gire
180 grados en sentido horario, debe pulsar 180A y luego D como enter.
De igual manera, deseo que gire 90 grados en sentido antihoraio, debe pulsar 90B y luego D
como enter y así sucesivamente.
Ambos se conectan virtualmente usando null-modem de un software emulador de puerto virtuales
que ya está instalado en las máquinas.
------------------------------------------------------------------------
Responsable: Javier Barriga Hoyle
------------------------------------------------------------------------
---------------------------------------------------------------------------------------*/
#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'},
{'E','0','F','D'} // 'D' es Enter
};
byte rowPins[ROWS] = {13,12,11,10};
byte colPins[COLS] = {7,6,5,4};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
char buffer[5];
int indice = 0;
String data = "";
void setup() {
Serial.begin(9600); // Velocidad de transmisión
}
void loop()
{
/*Etapa de transmision*/
char key = keypad.getKey();
if (key)
{
if ((key >= '0' && key <= '9') || key == 'A' || key == 'B') {
if (indice < 4) { // Máximo 3 dígitos + 1 letra
buffer[indice++] = key;
}
}
else if (key == 'D') // Tecla Enter
{ buffer[indice] = '\0'; // Cierra la cadena
Serial.println(buffer); // Enviar por UART con \n
indice = 0;
memset(buffer, 0, sizeof(buffer)); // llena buffer con ceros
}
}
}