// Definição dos pinos
const int colunas[4] = {5, 4, 3, 2}; // Pinos das colunas
const int linhas[4] = {9, 8, 7, 6}; // Pinos das linhas
// Mapeamento das teclas do teclado 4x4
char teclas[4][4] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
void setup() {
// Configurando as colunas como saídas
for (int i = 0; i < 4; i++) {
pinMode(colunas[i], OUTPUT);
digitalWrite(colunas[i], HIGH); // Inicialmente, todas as colunas em HIGH
}
// Configurando as linhas como entradas com pull-up
for (int i = 0; i < 4; i++) {
pinMode(linhas[i], INPUT_PULLUP);
}
Serial.begin(9600); // Inicializando a comunicação serial
}
void loop() {
// Escanear todas as colunas
for (int c = 0; c < 4; c++) {
// Definindo uma coluna como LOW
digitalWrite(colunas[c], LOW);
// Verificando cada linha
for (int l = 0; l < 4; l++) {
if (digitalRead(linhas[l]) == LOW) {
// Aguarda enquanto a tecla estiver pressionada (debounce)
delay(50);
while (digitalRead(linhas[l]) == LOW);
// Imprime a tecla pressionada no monitor serial
Serial.println(teclas[l][c]);
delay(100); // Pequena pausa para evitar leitura múltipla
}
}
// Retornando a coluna para HIGH
digitalWrite(colunas[c], HIGH);
}
}