#include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "freertos/queue.h" #include "driver/gpio.h" #include "driver/ledc.h" #include "user_board.h" #define BREATHE_LED_NUM 3 TaskHandle_t xTaskLEDsHandle = NULL; void vTaskLEDs(void *pvParameters) { ledc_timer_config_t ledc_timer = { .duty_resolution = LEDC_TIMER_13_BIT, .freq_hz = 5000, .speed_mode = LEDC_LOW_SPEED_MODE, .timer_num = LEDC_TIMER_0, .clk_cfg = LEDC_AUTO_CLK }; ledc_timer_config(&ledc_timer); ledc_channel_config_t ledc_channels[BOARD_LED_NUM] = { { .channel = LEDC_CHANNEL_0, .duty = 0, .gpio_num = BOARD_RGB_LED_R_PIN, .speed_mode = LEDC_LOW_SPEED_MODE, .hpoint = 0, .timer_sel = LEDC_TIMER_0, .flags.output_invert = 1 }, { .channel = LEDC_CHANNEL_1, .duty = 0, .gpio_num = BOARD_RGB_LED_G_PIN, .speed_mode = LEDC_LOW_SPEED_MODE, .hpoint = 0, .timer_sel = LEDC_TIMER_0, .flags.output_invert = 1 }, { .channel = LEDC_CHANNEL_2, .duty = 0, .gpio_num = BOARD_RGB_LED_B_PIN, .speed_mode = LEDC_LOW_SPEED_MODE, .hpoint = 0, .timer_sel = LEDC_TIMER_0, .flags.output_invert = 1 }, { .channel = LEDC_CHANNEL_3, .duty = 0, .gpio_num = BOARD_RGB_LED_W_PIN, .speed_mode = LEDC_LOW_SPEED_MODE, .hpoint = 0, .timer_sel = LEDC_TIMER_0, .flags.output_invert = 1 }, { .channel = LEDC_CHANNEL_4, .duty = 0, .gpio_num = BOARD_LED1_PIN, .speed_mode = LEDC_LOW_SPEED_MODE, .hpoint = 0, .timer_sel = LEDC_TIMER_0, .flags.output_invert = 1 }, { .channel = LEDC_CHANNEL_5, .duty = 0, .gpio_num = BOARD_LED2_PIN, .speed_mode = LEDC_LOW_SPEED_MODE, .hpoint = 0, .timer_sel = LEDC_TIMER_0, .flags.output_invert = 1 } }; for(uint8_t i = 0; i < BOARD_LED_NUM; i++) { ledc_channel_config(&ledc_channels[i]); } ledc_fade_func_install(0); for(;;) { ledc_set_fade_with_time(ledc_channels[BREATHE_LED_NUM].speed_mode, ledc_channels[BREATHE_LED_NUM].channel, 1023, 2500); ledc_fade_start(ledc_channels[BREATHE_LED_NUM].speed_mode, ledc_channels[BREATHE_LED_NUM].channel, LEDC_FADE_NO_WAIT); vTaskDelay(pdMS_TO_TICKS(2500)); ledc_set_fade_with_time(ledc_channels[BREATHE_LED_NUM].speed_mode, ledc_channels[BREATHE_LED_NUM].channel, 0, 2500); ledc_fade_start(ledc_channels[BREATHE_LED_NUM].speed_mode, ledc_channels[BREATHE_LED_NUM].channel, LEDC_FADE_NO_WAIT); vTaskDelay(pdMS_TO_TICKS(2500)); } }