#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/pwm.h"
#define LED_RED_PIN 13
#define LED_GREEN_PIN 11
#define LED_BLUE_PIN 12
#define TIME_TO_CHANGE 2000
volatile uint dutyPercentage = 5; // Número inteiro que representa a porcentagem inicial do duty cycle
void led_blink(uint color, uint hertz) // Pisca o led em determinada frequência
{
gpio_set_function(color, GPIO_FUNC_PWM);
uint wrap = (125000000 / hertz) - 1; // Fórmula para calcular o Wrap
uint slice = pwm_gpio_to_slice_num(color);
uint dutycycle = (wrap * dutyPercentage) / 100;
pwm_set_wrap(slice, wrap);
pwm_set_gpio_level(color, dutycycle);
pwm_set_clkdiv(slice, 1.0);
pwm_set_enabled(slice, true);
}
int main()
{
stdio_init_all();
absolute_time_t start_time = get_absolute_time(); // Inicializa o tempo
while (true)
{
led_blink(LED_RED_PIN, 1000); // Define que o Led vermelho pisque em 1000hz
if (absolute_time_diff_us(start_time, get_absolute_time()) >= TIME_TO_CHANGE * 1000) // A cada 2 segundos, muda o duty cycle
{
if (dutyPercentage <= 100)
{
dutyPercentage += 5;
printf("Aumentando o ciclo ativo! \n");
}
else
{
dutyPercentage = 5;
printf("O Limite do dutycycle foi atingido, duty cycle resetado para 5%%\n");
}
start_time = get_absolute_time(); // Reseta o contador de tempo
}
else
{
// Verifica o tempo decorrido em segundos
uint seconds = absolute_time_diff_us(start_time, get_absolute_time()) / 1000000;
printf("Segundos: %d \n", seconds + 1);
}
sleep_ms(100);
}
}