#include <Arduino.h>
// Definição do número de linhas e colunas
#define rows 4
#define cols 4
// Mapa das teclas do teclado matricial
const char KEY_MAP[4][4] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
// Definição dos pinos GPIO para os LEDs
const uint8_t LED_RED_PIN = 9; // LED Vermelho
const uint8_t LED_GREEN_PIN = 10; // LED Verde
const uint8_t LED_BLUE_PIN = 11; // LED Azul
// Inicializa os pinos dos LEDs
void init() {
pinMode(LED_RED_PIN, OUTPUT);
pinMode(LED_GREEN_PIN, OUTPUT);
pinMode(LED_BLUE_PIN, OUTPUT);
digitalWrite(LED_RED_PIN, LOW); // Apaga o LED Vermelho
digitalWrite(LED_GREEN_PIN, LOW); // Apaga o LED Verde
digitalWrite(LED_BLUE_PIN, LOW); // Apaga o LED Azul
// Inicializa a comunicação serial
Serial.begin(115200);
while (!Serial) { // Espera até que a comunicação serial esteja pronta
delay(100);
}
}
// Função que simula a leitura do teclado via terminal serial
char read_keypad() {
if (Serial.available() > 0) {
return Serial.read(); // Lê a tecla enviada via terminal serial
}
return '\0'; // Retorna '\0' se nenhuma tecla for pressionada
}
// Acende o LED apropriado com base na tecla pressionada
void control_led(char key) {
// Desliga todos os LEDs
digitalWrite(LED_RED_PIN, LOW);
digitalWrite(LED_GREEN_PIN, LOW);
digitalWrite(LED_BLUE_PIN, LOW);
switch (key) {
case '1': case '4': case '7': case '*':
digitalWrite(LED_RED_PIN, HIGH); // Acende o LED Vermelho
break;
case '2': case '5': case '8': case '0':
digitalWrite(LED_GREEN_PIN, HIGH); // Acende o LED Verde
break;
case '3': case '6': case '9': case '#':
digitalWrite(LED_BLUE_PIN, HIGH); // Acende o LED Azul
break;
// 'A', 'B', 'C', 'D' não acendem LEDs
}
}
void setup() {
init(); // Inicializa o teclado e os LEDs
Serial.println("--- Pronto para receber entradas do usuário ---");
}
void loop() {
char key = read_keypad(); // Lê a tecla pressionada
if (key != '\0') {
Serial.printf("Tecla pressionada: [%c]\n", key); // Imprime a tecla pressionada
control_led(key); // Acende o LED correspondente
delay(250); // Delay para evitar múltiplas leituras da mesma tecla
}
}