//ALESSANDRA KIMIE HIRO.
//EMBARCATEC IFMA - GRUPO 02
//TAREFA 2
//5. Modifique o exemplo de código apresentado na videoaula (reproduzido
//abaixo) para controlar os três LEDs RGB da placa BitDogLab usando o módulo
//PWM e interrupções, seguindo as orientações a seguir:
//A. O LED vermelho deve ser acionado com um PWM de 1kHz.
//B. O duty cycle deve ser iniciado em 5% e atualizado a cada 2 segundos em
//incrementos de 5%. Quando atingir o valor máximo, deve retornar a 5%.
//‐ O LED azul deve ser acionado com um PWM de 10kHz.
#include "pico/stdlib.h"
#include "hardware/pwm.h"
// Definindo os pinos dos LEDs RGB
#define LED_RED 13
#define LED_GREEN 11
#define LED_BLUE 12
// Frequências PWM
#define FREQ_RED 1000 // 1 kHz
#define FREQ_BLUE 10000 // 10 kHz
// Função para configurar PWM em um pino
uint configure_pwm(uint pin, uint freq_hz) {
gpio_set_function(pin, GPIO_FUNC_PWM);
uint slice_num = pwm_gpio_to_slice_num(pin);
// Calcula o wrap para a frequência desejada (clock padrão: 125 MHz)
uint32_t clock_div = 125000000 / freq_hz;
pwm_set_wrap(slice_num, clock_div - 1);
pwm_set_enabled(slice_num, true);
return slice_num;
}
// Função principal
int main() {
// Inicializa o sistema
stdio_init_all();
// Configura os LEDs RGB como saída PWM
uint slice_red = configure_pwm(LED_RED, FREQ_RED);
uint slice_blue = configure_pwm(LED_BLUE, FREQ_BLUE);
// Inicializa os LEDs desligados
pwm_set_gpio_level(LED_RED, 0);
pwm_set_gpio_level(LED_BLUE, 0);
// Variável para o duty cycle do LED vermelho
uint duty_cycle_red = 5; // Duty cycle inicial (5%)
while (true) {
// Controle do LED vermelho
pwm_set_gpio_level(LED_RED, duty_cycle_red * (1250)); // Define duty cycle
// Incrementa o duty cycle a cada 2 segundos
duty_cycle_red += 5;
if (duty_cycle_red > 100) {
duty_cycle_red = 5; // Reseta para 5% ao atingir 100%
}
// Controle do LED azul (sempre com 50% duty cycle para exemplo)
pwm_set_gpio_level(LED_BLUE, 6250); // 50% duty cycle em 10 kHz
sleep_ms(2000); // Aguarda 2 segundos
}
return 0;
}
Loading
pi-pico-w
pi-pico-w