#include <stdio.h>
#include <stdlib.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/adc.h"
#include "driver/ledc.h"
#define SAMPLE_CNT 2
static const adc1_channel_t adc_channel = ADC_CHANNEL_6;
#define LEDC_GPIO 18
static ledc_channel_config_t ledc_channel;
static void init_hw(void)
{
adc1_config_width(ADC_WIDTH_BIT_12);
adc1_config_channel_atten(adc_channel, ADC_ATTEN_DB_11);
ledc_timer_config_t ledc_timer = {
.duty_resolution = LEDC_TIMER_10_BIT,
.freq_hz = 1000,
.speed_mode = LEDC_LOW_SPEED_MODE,
.timer_num = LEDC_TIMER_0,
.clk_cfg = LEDC_AUTO_CLK,
};
ledc_timer_config(&ledc_timer);
ledc_channel.channel = LEDC_CHANNEL_0;
ledc_channel.duty = 0;
ledc_channel.gpio_num = LEDC_GPIO;
ledc_channel.speed_mode = LEDC_LOW_SPEED_MODE;
ledc_channel.hpoint = 0;
ledc_channel.timer_sel = LEDC_TIMER_0;
ledc_channel_config(&ledc_channel);
}
void app_main(void)
{
init_hw();
while (1)
{
uint32_t adc_val = 0;
for (int i = 0; i < SAMPLE_CNT; ++i)
{
adc_val += adc1_get_raw(adc_channel);
}
adc_val /= SAMPLE_CNT;
ledc_set_duty(ledc_channel.speed_mode, ledc_channel.channel, adc_val);
ledc_update_duty(ledc_channel.speed_mode, ledc_channel.channel);
vTaskDelay(500 / portTICK_RATE_MS);
}
}