/*
Unidade 4 - Tarefa 2
Lara Gardenia
Questão 1: Elabore um programa para acionar um LED quando o botão A for
pressionado 5 vezes, utilizando o temporizador como contador. Quando o valor
da contagem atingir 5 vezes, um LED deve ser piscar por 10 segundos na
frequência de 10 Hz.
*/
#include <stdio.h>
#include "pico/stdlib.h"
// Definições de pinos
#define BUTTON_A 16
#define LED_PIN 9
volatile int button_a_count = 0;
const uint DEBOUNCE_DELAY_MS = 200; // Debounce em milissegundos
absolute_time_t last_press_a;
void button_a_irq_handler(uint gpio, uint32_t events) {
absolute_time_t now = get_absolute_time();
if (gpio == BUTTON_A && absolute_time_diff_us(last_press_a, now) > DEBOUNCE_DELAY_MS * 1000) {
last_press_a = now; // Atualiza o tempo do último clique
button_a_count++;
printf("Botão A pressionado. Contagem: %d\n", button_a_count);
if (button_a_count >= 5) {
gpio_put(LED_PIN, 1); // Acende o LED
sleep_ms(1000);
gpio_put(LED_PIN, 0); // Apaga o LED
button_a_count = 0; // Reseta a contagem
}
}
}
int main() {
stdio_init_all();
printf("Inicializando...\n");
// Configuração dos pinos
gpio_init(BUTTON_A);
gpio_set_dir(BUTTON_A, GPIO_IN);
gpio_pull_up(BUTTON_A);
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
// Configurar interrupção
gpio_set_irq_enabled_with_callback(BUTTON_A, GPIO_IRQ_EDGE_FALL, true, &button_a_irq_handler);
last_press_a = get_absolute_time();
while (true) {
tight_loop_contents();
}
return 0;
}