/*Na questão anterior, implemente o botão B, para mudar a frequência do
LED para 1 Hz. */
#include "pico/stdlib.h"
#include "hardware/timer.h"
#include "hardware/pwm.h"
// Definições dos pinos conforme o pinout da placa
#define LED_PIN 13 // LED vermelho do RGB
#define BUTTON_A 5 // Primeiro botão
#define BUTTON_B 6 // Segundo botão
#define TIMER_INTERVAL 100
volatile uint button_count = 0;
volatile bool led_blinking = false;
volatile uint freq = 10; // Frequência inicial 10 Hz
void timer_callback(uint gpio, uint32_t events) {
// Tratamento do Botão A
if (gpio == BUTTON_A && !gpio_get(BUTTON_A)) {
button_count++;
printf("Contagem: %d\n", button_count);
if (button_count == 5) {
led_blinking = true;
button_count = 0;
}
}
// Tratamento do Botão B
if (gpio == BUTTON_B && !gpio_get(BUTTON_B)) {
freq = (freq == 10) ? 1 : 10; // Alterna entre 10Hz e 1Hz
}
}
int main() {
stdio_init_all();
// Inicialização do LED
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
// Inicialização dos botões
gpio_init(BUTTON_A);
gpio_init(BUTTON_B);
gpio_set_dir(BUTTON_A, GPIO_IN);
gpio_set_dir(BUTTON_B, GPIO_IN);
gpio_pull_up(BUTTON_A);
gpio_pull_up(BUTTON_B);
// Configuração das interrupções
gpio_set_irq_enabled_with_callback(BUTTON_A, GPIO_IRQ_EDGE_FALL, true, &timer_callback);
gpio_set_irq_enabled(BUTTON_B, GPIO_IRQ_EDGE_FALL, true);
printf(":: Após botão A ser pressionado 5 vezes,o LED pisca por 10 segundos na frequência de 10 Hz ::\n");
printf(":: Aperte botão B para alterar a frequência entre 1 Hz e 10 Hz::\n");
while (true) {
if (led_blinking) {
uint32_t start_time = time_us_32();
uint32_t blink_duration = 10000000; // 10 segundos em microssegundos
while ((time_us_32() - start_time) < blink_duration) {
gpio_put(LED_PIN, 1);
sleep_ms(1000/(freq)); //tempo = 1000 milissegundos /frequencia
gpio_put(LED_PIN, 0);
sleep_ms(1000/(freq));
}
led_blinking = false;
}
sleep_ms(10);
}
}
A
B