#include "pico/stdlib.h"
#include <stdio.h>
#define ROWS 4
#define COLS 4
const uint8_t row_pins[ROWS]={8,7,6,5};
const uint8_t col_pins[COLS]={4,3,2,9};
const char key_map[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
void keypad_init();
char read_keypad();
int main(){
stdio_init_all();
keypad_init();
while(true){
char key = read_keypad();
if (key != '\0'){
printf("Tecla pressionada: %c\n", key);
sleep_ms(200);
}
else{
sleep_ms(200);
}
}
return 0;
}
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);
}
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]);
}
}
char read_keypad(){
for (int row = 0; row < ROWS; row++){
gpio_put(row_pins[row], 1);
for (int col = 0; col < COLS; col++){
if (gpio_get(col_pins[col])){
gpio_put(row_pins[row],0);
return key_map[row][col];
}
}
gpio_put(row_pins[row],0);
}
return '\0';
}