99 lines
2.8 KiB
C
99 lines
2.8 KiB
C
#include "indicator_led.h"
|
|
|
|
#define LED_NUM 12 // LED灯珠个数
|
|
|
|
rt_thread_t led_blink_thread = RT_NULL;
|
|
|
|
// 灯处于特定颜色还是闪烁状态
|
|
uint8_t LED_Blink_Staue[LED_NUM] = {0};
|
|
// 灯闪烁颜色缓存
|
|
RGBColor_TypeDef LED_Blink_Color[LED_NUM] = {0};
|
|
const RGBColor_TypeDef LED_OFF = {0, 0, 0};
|
|
const RGBColor_TypeDef LED_ON = {255, 255, 255};
|
|
|
|
/**
|
|
* @brief 设置特定LED的颜色或开关
|
|
* @param LedId LED的序号(0~LED_NUM-1)
|
|
* @param Color 颜色/开关 LED_RED,LED_BLUE,LED_OFF,LED_ON(白色)……
|
|
*/
|
|
void LED_Set(uint16_t LedId, RGBColor_TypeDef Color)
|
|
{
|
|
LED_Blink_Staue[LedId] = 0;
|
|
Set_LEDColor(LedId, Color);
|
|
RGB_Reflash();
|
|
}
|
|
/**
|
|
* @brief 设置连续多个特定LED的颜色或开关
|
|
* @param LedId LED的序号(0~LED_NUM-1)
|
|
* @param Color 颜色/开关 LED_RED,LED_BLUE,LED_OFF,LED_ON(白色)……
|
|
*/
|
|
void LED_SetMore(uint16_t LedId_begin, uint16_t LedId_end, RGBColor_TypeDef Color)
|
|
{
|
|
for (int LedId = LedId_begin; LedId <=LedId_end ; LedId++)
|
|
{
|
|
Set_LEDColor(LedId, LED_Blink_Color[LedId]);
|
|
}
|
|
RGB_Reflash();
|
|
}
|
|
|
|
/**
|
|
* @brief 设置特定LED的闪烁
|
|
* @param LedId LED的序号(0~LED_NUM-1)
|
|
* @param Color 颜色 LED_RED,LED_BLUE……
|
|
*/
|
|
void LED_Blink(uint16_t LedId, RGBColor_TypeDef Color)
|
|
{
|
|
LED_Blink_Staue[LedId] = 1;
|
|
LED_Blink_Color[LedId] = Color;
|
|
}
|
|
/**
|
|
* @brief 设置连续多个特定LED的闪烁
|
|
* @param LedId LED的序号(0~LED_NUM-1)
|
|
* @param Color 颜色 LED_RED,LED_BLUE……
|
|
*/
|
|
void LED_BlinkMore(uint16_t LedId_begin, uint16_t LedId_end, RGBColor_TypeDef Color)
|
|
{
|
|
for (int LedId = LedId_begin; LedId <=LedId_end ; LedId++)
|
|
{
|
|
LED_Blink_Staue[LedId] = 1;
|
|
LED_Blink_Color[LedId] = Color;
|
|
}
|
|
}
|
|
/**
|
|
* @brief 每0.5s判断各盏灯是否要翻转
|
|
*/
|
|
void led_blink_entry(void *parameter)
|
|
{
|
|
uint8_t LED_Blink_ON = 1;
|
|
while (1)
|
|
{
|
|
for (int LedId = 0; LedId < LED_NUM; LedId++)
|
|
{
|
|
if (LED_Blink_Staue[LedId])
|
|
{
|
|
if (LED_Blink_ON)
|
|
{
|
|
Set_LEDColor(LedId, LED_Blink_Color[LedId]);
|
|
}
|
|
else
|
|
{
|
|
Set_LEDColor(LedId, LED_OFF);
|
|
}
|
|
}
|
|
}
|
|
LED_Blink_ON = !LED_Blink_ON;
|
|
RGB_Reflash();
|
|
rt_thread_mdelay(500);
|
|
}
|
|
}
|
|
int led_init(void)
|
|
{
|
|
led_blink_thread = rt_thread_create("led blink control thread", led_blink_entry, RT_NULL, 1024, 20, 20);
|
|
if (led_blink_thread == RT_NULL)
|
|
{
|
|
rt_kprintf("led blink control thread creat failed!\n");
|
|
return 0;
|
|
}
|
|
rt_thread_mdelay(200); // avoid multi-thread on LED matrix transmit.
|
|
rt_thread_startup(led_blink_thread);
|
|
} |