#include <stdio.h>
#include "pico/stdlib.h"
// Embarcatech 2024 - Projeto 3 - leitura de sinal digital GPIO (teclado matricial)
// autor: Luis Ferlim
// luisferlim.com
#define ROW 4
#define COLUM 4
char result;
//definicao dos pinos para linhas e colunas
const uint8_t columPins[COLUM] = {2, 3 , 4 , 5};
const uint8_t rowPins[ROW] = {6, 7 , 8 , 9};
//declarando as funcoes do programa
void init();
char leitura();
const char keyMap [ROW][COLUM] = {
{'D', '#', '0', '*'},
{'C', '9', '8', '7'},
{'B', '6', '5', '4'},
{'A', '3', '2', '1'}
};
int main() {
stdio_init_all();
init();
while (true) {
result = leitura();
if (result != '\0'){
printf("Tecla pressionada: %c\n", result);
sleep_ms(200);
}
}
}
void init (){
for (int i = 0; i < ROW; i++){
gpio_init(rowPins[i]);
gpio_set_dir(rowPins[i], GPIO_OUT);
gpio_put(rowPins[i], 0);
}
for (int i = 0; i < COLUM; i++){
gpio_init(columPins[i]);
gpio_set_dir(columPins[i], GPIO_IN);
gpio_pull_down(columPins[i]);
}
}
char leitura(){
for (int row = 0; row < ROW; row ++){
gpio_put(rowPins[row], 1); //coloca em nivel alto, util para quando formos verificar o pull down
for (int colum = 0; colum < COLUM; colum++){
//verifica o estado de cada item na coluna
if (gpio_get(columPins[colum])){
gpio_put(rowPins[row], 0);
return keyMap [row][colum];
}
}
gpio_put(rowPins[row], 0); //poe a linha atual em nivel baixo
}
return '\0';
}