添加多色呼吸灯
This commit is contained in:
@@ -10,14 +10,15 @@ static uint8_t led_strip_pixels[EXAMPLE_LED_NUMBERS * 3];
|
||||
uint16_t toggle_cycle = 1000;
|
||||
static uint8_t rgb_color_index = RGB_COLOR_RAD;
|
||||
|
||||
rgb_color_t rgb_color_rad = {0,255,0,0,0};
|
||||
rgb_color_t rgb_color_orange = {0,255,80,0,0};
|
||||
rgb_color_t rgb_color_green = {0,0,255,0,0};
|
||||
rgb_color_t rgb_color_blue = {0,0,0,255,0};
|
||||
rgb_color_t rgb_color_cyan = {0,0,255,255,0};
|
||||
rgb_color_t rgb_color_purple = {0,255,0,255,0};
|
||||
rgb_color_t rgb_color_white = {0,255,255,255,0};
|
||||
|
||||
rgb_color_t rgb_color_rad = {0,255,0,0,0,1,0};
|
||||
rgb_color_t rgb_color_orange = {0,255,80,0,0,1,0};
|
||||
rgb_color_t rgb_color_green = {0,0,255,0,0,1,0};
|
||||
rgb_color_t rgb_color_blue = {0,0,0,255,0,1,0};
|
||||
rgb_color_t rgb_color_cyan = {0,0,255,255,0,1,0};
|
||||
rgb_color_t rgb_color_purple = {0,255,0,255,0,1,0};
|
||||
rgb_color_t rgb_color_white = {0,255,255,255,0,1,0};
|
||||
rgb_color_t rgb_color_green_white = {0,0,255,0,0,2,5};
|
||||
rgb_color_t rgb_color_green_purple = {0,0,255,0,0,2,5};
|
||||
void led_strip_init(void)
|
||||
{
|
||||
|
||||
@@ -68,6 +69,10 @@ void work_rgb_led_start(void)
|
||||
void _work_rgb_led(void *arg)
|
||||
{
|
||||
static rgb_color_t* expression;
|
||||
static uint8_t rgb_color_index_lat = 255;
|
||||
if(rgb_color_index_lat != rgb_color_index)
|
||||
{
|
||||
rgb_color_index_lat = rgb_color_index;
|
||||
switch (rgb_color_index)
|
||||
{
|
||||
case RGB_COLOR_RAD:
|
||||
@@ -91,18 +96,100 @@ void _work_rgb_led(void *arg)
|
||||
case RGB_COLOR_BLUE:
|
||||
expression = &rgb_color_blue;
|
||||
break;
|
||||
case RGB_COLOR_GREEN_WHITE:
|
||||
expression = &rgb_color_green_white;
|
||||
break;
|
||||
case RGB_COLOR_GREEN_PURPLE:
|
||||
expression = &rgb_color_green_purple;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
rgb_toggle(expression);
|
||||
os_work_later(toggle_cycle * 0.5);
|
||||
}
|
||||
|
||||
void rgb_update_cyle(uint16_t cyle)
|
||||
{
|
||||
toggle_cycle = cyle;
|
||||
}
|
||||
uint8_t breathing_dispose(rgb_color_t* rgb_color,int16_t* vel, uint8_t color_min, uint8_t color_max)
|
||||
{
|
||||
static int dir = 1, color_dir = 1, color_cnt = 0;
|
||||
*vel += dir * rgb_color->colortoggle_speed;
|
||||
if(*vel > color_max){*vel = color_max; dir = -1;}
|
||||
else if(*vel < color_min){*vel = color_min; dir = 1; color_cnt += color_dir;}
|
||||
|
||||
if(color_cnt >= rgb_color->color_cnt -1 )
|
||||
color_dir = -1;
|
||||
else if(color_cnt <= 0)
|
||||
color_dir = 1;
|
||||
|
||||
return color_cnt;
|
||||
}
|
||||
void breathing_color_change(rgb_color_t* rgb_color)
|
||||
{
|
||||
static int16_t COLOR_SUM;
|
||||
uint8_t color_cnt = breathing_dispose(rgb_color, &COLOR_SUM, 0, 255);
|
||||
switch (rgb_color_index)
|
||||
{
|
||||
case RGB_COLOR_GREEN_WHITE:
|
||||
{
|
||||
switch(color_cnt)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
rgb_color->red = 0;
|
||||
rgb_color->green = (uint8_t)COLOR_SUM;
|
||||
rgb_color->blue = 0;
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
rgb_color->red = (uint8_t)COLOR_SUM;
|
||||
rgb_color->green = (uint8_t)COLOR_SUM;
|
||||
rgb_color->blue = (uint8_t)COLOR_SUM;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RGB_COLOR_GREEN_PURPLE:
|
||||
{
|
||||
switch(color_cnt)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
rgb_color->red = 0;
|
||||
rgb_color->green = (uint8_t)COLOR_SUM;
|
||||
rgb_color->blue = 0;
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
rgb_color->red = (uint8_t)COLOR_SUM;
|
||||
rgb_color->green = 0;
|
||||
rgb_color->blue = (uint8_t)COLOR_SUM;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
void rgb_toggle(rgb_color_t* rgb_color)
|
||||
{
|
||||
if(rgb_color->color_cnt > 1)
|
||||
{
|
||||
breathing_color_change(rgb_color);
|
||||
led_strip_set_pixel(0,rgb_color->index,rgb_color->green,rgb_color->blue,rgb_color->red);
|
||||
return;
|
||||
}
|
||||
if(rgb_color->toggle_flag == 0)
|
||||
led_strip_set_pixel(0,rgb_color->index,rgb_color->green,rgb_color->blue,rgb_color->red);
|
||||
else
|
||||
|
||||
@@ -30,6 +30,9 @@ typedef struct rgb_color_s
|
||||
uint8_t green;
|
||||
uint8_t blue;
|
||||
uint8_t toggle_flag;
|
||||
uint8_t color_cnt;
|
||||
uint8_t colortoggle_speed;
|
||||
|
||||
}rgb_color_t;
|
||||
|
||||
typedef enum
|
||||
@@ -41,6 +44,8 @@ typedef enum
|
||||
RGB_COLOR_PURPLE,
|
||||
RGB_COLOR_CYAN,
|
||||
RGB_COLOR_BLUE,
|
||||
RGB_COLOR_GREEN_WHITE,
|
||||
RGB_COLOR_GREEN_PURPLE,
|
||||
}RGB_COLOR;
|
||||
|
||||
void led_strip_init(void);
|
||||
|
||||
Reference in New Issue
Block a user