#include <stdio.h> // Biblioteca padrão para entrada e saída, utilizada para printf.
#include "pico/stdlib.h" // Biblioteca padrão para funções básicas do Pico, como GPIO e temporização.
#include "hardware/pwm.h" // Biblioteca para controle do PWM.
// Define o pino GPIO 4 para controlar o LED Vermelho.
const uint led_vermelho = 13;
// Define o pino GPIO 10 para controlar o LED Azul.
const uint led_azul = 12;
// Variáveis PWM LED vermelho
const int periodo_pwm_led_vermelho = 12500; // Período do PWM = 1 kHz
const int incremento_duty_cycle = 5; // Incremento Duty Cycle LED Vermelho
int duty_cycle_inicial = 625; // Duty Cycle inicial LED Vermelho
// Variávei PWM LED Azul
const int periodo_pwm_led_azul = 1250; // Período do PWM = 10 kHz
const float divisor_pwm = 1.0; // Divisor de Clock
int main() {
stdio_init_all(); // Inicializa a comunicação serial para permitir o uso de printf
uint slice_led_vermelho;
uint slice_led_azul;
int controle_duty_cycle = 5;
// Configuração do PWM - LED Vermelho
gpio_set_function(led_vermelho, GPIO_FUNC_PWM);
slice_led_vermelho = pwm_gpio_to_slice_num(led_vermelho);
pwm_set_clkdiv(slice_led_vermelho, divisor_pwm);
pwm_set_wrap(slice_led_vermelho, periodo_pwm_led_vermelho);
pwm_set_gpio_level(led_vermelho, duty_cycle_inicial); // Duty Cycle = 5%
pwm_set_enabled(slice_led_vermelho, true);
// Configuração do PWM - LED Azul
gpio_set_function(led_azul, GPIO_FUNC_PWM);
slice_led_azul = pwm_gpio_to_slice_num(led_azul);
pwm_set_clkdiv(slice_led_azul, divisor_pwm);
pwm_set_wrap(slice_led_azul, periodo_pwm_led_azul);
pwm_set_gpio_level(led_azul, periodo_pwm_led_azul); // Duty Cycle = 100%
pwm_set_enabled(slice_led_azul, true);
while(true) {
printf("LED Azul Duty Cycle = 100%%\n");
printf("LED Vermelho Duty Cycle = %d%%\n", controle_duty_cycle);
// Incremento de 5% no Duty Cycle do LED Vermelho
controle_duty_cycle += incremento_duty_cycle;
if (controle_duty_cycle > 100) {
controle_duty_cycle = 5;
}
sleep_ms(2000);
// Calcula do PWM para o novo Duty Cycle do LED Vermelho
duty_cycle_inicial = (controle_duty_cycle * periodo_pwm_led_vermelho) / 100;
pwm_set_gpio_level(led_vermelho, duty_cycle_inicial);
}
return 0;
}