#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "driver/ledc.h"

#define LEDC_TIMER      LEDC_TIMER_0
#define LEDC_MODE       LEDC_HIGH_SPEED_MODE
#define LEDC_CHANNEL    LEDC_CHANNEL_0
#define LEDC_PIN        GPIO_NUM_5

void app_main()
{
    // Configura o pino GPIO para o modo OUTPUT
    gpio_pad_select_gpio(LEDC_PIN);
    gpio_set_direction(LEDC_PIN, GPIO_MODE_OUTPUT);

    // Configura o controlador LEDC
    ledc_timer_config_t ledc_timer = {
        .duty_resolution = LEDC_TIMER_10_BIT, // Resolução do duty cycle
        .freq_hz = 5000,                      // Frequência do sinal em Hz
        .speed_mode = LEDC_MODE,              // Modo de operação
        .timer_num = LEDC_TIMER                // Timer usado pelo controlador
    };
    ledc_timer_config(&ledc_timer);

    // Configura o canal LEDC
    ledc_channel_config_t ledc_channel = {
        .channel = LEDC_CHANNEL,
        .duty = 0,
        .gpio_num = LEDC_PIN,
        .speed_mode = LEDC_MODE,
        .timer_sel = LEDC_TIMER
    };
    ledc_channel_config(&ledc_channel);

    // Define o duty cycle para 50%
    ledc_set_duty(ledc_channel.speed_mode, ledc_channel.channel, (1 << ledc_timer.duty_resolution) / 2);
    ledc_update_duty(ledc_channel.speed_mode, ledc_channel.channel);
}