#include "pico/stdlib.h"
//Definiçao dos pinos do teclado matricial
#define ROWS 4
#define COLS 4
//Atualização dos pinos de acordo com as novas conexões
const uint8_t row_pins[ROWS] = {8, 7, 6, 5};//Pinos conectados às linhas R1, R2, R3 e R4
const uint8_t col_pins[COLS] = {4, 3, 2, 1};//Pinos conectados às linhas C1, C2, C3 e C4
//Mapa de teclas do teclado matricial
const char key_maps[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
//Função para inicializar os pinos do teclado
void keypad_init(){
for(int i=0; i<ROWS; i++){
gpio_init(row_pins[i]);
gpio_set_dir(row_pins[i], GPIO_OUT);
gpio_put(row_pins[i], 0);//Configura as linhas como saída em nível baixo
}
for(int i=0; i<COLS; i++){
gpio_init(col_pins[i]);
gpio_set_dir(col_pins[i], GPIO_IN);
gpio_pull_down(col_pins[i]);//Configuras as colunas como entradas com pull-down
}
}
//Função para ler o teclado matricial
char read_keypad(){
for(int row=0; row<ROWS; row++){
gpio_put(row_pins[row], 1);//Ativa a linha atual
for(int col=0; col<COLS; col++){
if(gpio_get(col_pins[col])){ //Verifica se a coluna atual está em nível alto
gpio_put(row_pins[row], 0); //Desativa a linha atual
return key_maps[row][col]; //Retorna a tecla pressionada
}
}
gpio_put(row_pins[row], 0); //Desativa a linha atual
}
return '\0';//Retorna nulo se nenhuma tecla foi pressionada
}
int main(){
stdio_init_all();
keypad_init(); //Inicializa o teclado matricial
while(true){
char key = read_keypad(); //Lê o teclado
if(key !='/0'){//Verifica se uma tecla foi pressionada
printf("Tecla pressionada: %c\n", key);//Imprime a tecla pressionada
sleep_ms(200);//Aguarda para evitar múltiplas leituras da mesma tecla
}
}
return 0;
}