ESP32S2_Cal_Demo/main/app_task_led.c

100 lines
3.0 KiB
C

#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));
}
}