/*
Unidade 4 - Tarefa 2
Lara Gardenia
Questão 2: Na questão anterior, implemente o botão B, para mudar a frequência
do LED para 1 Hz.
*/
#include <stdio.h>
#include "pico/stdlib.h"
// Definições de pinos
#define BUTTON_A 16
#define BUTTON_B 20
#define LED_PIN 9
volatile int button_a_count = 0;
volatile int led_frequency = 10; // Frequência inicial em Hz
const uint DEBOUNCE_DELAY_MS = 200; // Debounce em milissegundos
absolute_time_t last_press_a;
absolute_time_t last_press_b;
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) {
for (int i = 0; i < 10 * led_frequency; i++) {
gpio_put(LED_PIN, 1);
sleep_ms(500 / led_frequency);
gpio_put(LED_PIN, 0);
sleep_ms(500 / led_frequency);
}
button_a_count = 0; // Reseta a contagem
}
}
}
void button_b_irq_handler(uint gpio, uint32_t events) {
absolute_time_t now = get_absolute_time();
if (gpio == BUTTON_B && absolute_time_diff_us(last_press_b, now) > DEBOUNCE_DELAY_MS * 1000) {
last_press_b = now; // Atualiza o tempo do último clique
led_frequency = (led_frequency == 10) ? 1 : 10; // Alterna entre 10 Hz e 1 Hz
printf("Frequência do LED alterada para: %d Hz\n", led_frequency);
}
}
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(BUTTON_B);
gpio_set_dir(BUTTON_B, GPIO_IN);
gpio_pull_up(BUTTON_B);
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
// Configurar interrupções
gpio_set_irq_enabled_with_callback(BUTTON_A, GPIO_IRQ_EDGE_FALL, true, &button_a_irq_handler);
gpio_set_irq_enabled_with_callback(BUTTON_B, GPIO_IRQ_EDGE_FALL, true, &button_b_irq_handler);
last_press_a = get_absolute_time();
last_press_b = get_absolute_time();
while (true) {
tight_loop_contents();
}
return 0;
}Loading
pi-pico-w
pi-pico-w