// atividade INCOMPLETA da aula síncrona de 14 de janeiro de 2025 //
// IFMA - Sistemas Embarcados Turma 2024.2 //
// aluna Isabela Pinheiro Ewerton //
#include "stdio.h"
#include "pico/stdlib.h"
// Define os pinos GPIO para Teclado e LED //
#define R1 2
#define R2 3
#define R3 4
#define R4 5
#define C1 6
#define C2 7
#define C3 8
#define C4 9
#define LEDG_PIN 11
#define LEDB_PIN 12
#define LEDR_PIN 13
// mapeando teclas 4x4 //
char teclas[4][4] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
void init_teclado(){
// config linhas de saida//
gpio_init(R1);
gpio_set_dir(R1, GPIO_OUT);
gpio_put(R1, 0);
gpio_init(R2);
gpio_set_dir(R2, GPIO_OUT);
gpio_put(R2, 0);
gpio_init(R3);
gpio_set_dir(R3, GPIO_OUT);
gpio_put(R3, 0);
gpio_init(R4);
gpio_set_dir(R4, GPIO_OUT);
gpio_put(R4, 0);
// config colunas como entrada
gpio_init(C1);
gpio_set_dir(C1, GPIO_IN);
gpio_pull_down(C1);
gpio_init(C2);
gpio_set_dir(C2, GPIO_IN);
gpio_pull_down(C2);
gpio_init(C3);
gpio_set_dir(C3, GPIO_IN);
gpio_pull_down(C3);
gpio_init(C4);
gpio_set_dir(C4, GPIO_IN);
gpio_pull_down(C4);
}
// inicializando GPIO LED//
void set_leds(bool g, bool b, bool r) {
gpio_put(LEDG_PIN, g);
gpio_put(LEDB_PIN, b);
gpio_put(LEDR_PIN, r);
}
// varredura de teclado //
char leitura_teclado(){
for (int row = 0; row < 4; row++){
// linha em nivel alto //
gpio_put(R1 + row, 1);
for (int col = 0; col < 4; col++){
if (gpio_get(C1 + col)){
// tempo para estabilizar tecla //
sleep_ms(50);
while (gpio_get(C1 + col)); // espera tecla ser pressionada//
gpio_put(R1 + row, 0); // reseta linha atual//
return teclas[row][col];
}
}
// coloca linha atual para nivel baixo//
gpio_put(R1 + row, 0);
}
return 0;
}
// funcao //
int main(){
stdio_init_all();
init_teclado();
gpio_init(LEDG_PIN);
gpio_set_dir(LEDG_PIN, GPIO_OUT);
gpio_init(LEDB_PIN);
gpio_set_dir(LEDB_PIN, GPIO_OUT);
gpio_init(LEDR_PIN);
gpio_set_dir(LEDR_PIN, GPIO_OUT);
gpio_init(R1);
gpio_set_dir(R1, GPIO_OUT);
gpio_init(R2);
gpio_set_dir(R2, GPIO_OUT);
gpio_init(R3);
gpio_set_dir(R3, GPIO_OUT);
gpio_init(R4);
gpio_set_dir(R4, GPIO_OUT);
gpio_init(C1);
gpio_set_dir(C1, GPIO_IN);
gpio_init(C2);
gpio_set_dir(C2, GPIO_IN);
gpio_init(C3);
gpio_set_dir(C3, GPIO_IN);
gpio_init(C4);
gpio_set_dir(C4, GPIO_IN);
printf("Pressione qualquer tecla para descobrir a cor do LED. Cuidado, tem uma coluna que não acende o LED!\n");
while (true){
if (gpio_get(C1))
{
set_leds(true, false, false);
}
else if (gpio_get(C2))
{
set_leds(false, true, false);
}
else if (gpio_get(C3))
{
set_leds(false, false, true);
}
else{
set_leds(false, false, false);
}
sleep_ms(100);
}
return 0;
}