连续多个

This commit is contained in:
dgjames 2025-01-17 21:37:00 +08:00
parent ecb8ff9d6a
commit aa411f8d5f
7 changed files with 148 additions and 137 deletions

View File

@ -25,7 +25,9 @@
"time.h": "c",
"icmp.h": "c",
"rgb.h": "c",
"main.h": "c"
"main.h": "c",
"indicator_led.h": "c",
"drv_matrix_led.h": "c"
},
// "cortex-debug.openocdPath": "d:/Develop/"
}

View File

@ -55,13 +55,8 @@ const RGBColor_TypeDef LT_GREEN = {32, 0, 0};
const RGBColor_TypeDef LT_BLUE = {0, 0, 32};
const RGBColor_TypeDef LT_WHITE = {16, 16, 16};
const RGBColor_TypeDef LED_OFF = {0, 0, 0};
const RGBColor_TypeDef LED_ON = {255, 255, 255};
//灯处于特定颜色还是闪烁状态
uint8_t LED_Blink_Staue[LED_NUM]={0};
// 灯闪烁颜色缓存
RGBColor_TypeDef LED_Blink_Color[LED_NUM] = {0};
// 灯颜色缓存
RGBColor_TypeDef RGB_Data[LED_NUM] = {0};
@ -166,58 +161,7 @@ void Set_LEDColor(uint16_t LedId, RGBColor_TypeDef Color)
RGB_Data[LedId].R = Color.R;
RGB_Data[LedId].B = Color.B;
}
void LED_Set(uint16_t LedId, RGBColor_TypeDef Color)
{
LED_Blink_Staue[LedId]=0;
RGB_Data[LedId].G = Color.G;
RGB_Data[LedId].R = Color.R;
RGB_Data[LedId].B = Color.B;
RGB_Reflash();
}
void LED_Blink(uint16_t LedId, RGBColor_TypeDef Color)
{
LED_Blink_Staue[LedId]=1;
LED_Blink_Color[LedId]=Color;
// while(1)
// {
// LED_Set(LedId,Color);
// rt_thread_mdelay(500);
// LED_Set(LedId,LED_OFF);
// rt_thread_mdelay(500);
// }
}
void LED_LITTLE_TEST(void)
{
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);
}
// LED_Set(1,LED_RED);
// rt_thread_mdelay(4000);
// LED_Toggle(1,LED_RED);
// rt_thread_mdelay(4000);
// LED_Set(1,LED_RED);
// rt_thread_mdelay(4000);
// LED_Toggle(1,LED_RED);
// rt_thread_mdelay(4000);
}
/**
* @brief TIM发送控制ws2812
* @param[in]

View File

@ -21,9 +21,7 @@ extern const RGBColor_TypeDef LED_RED;
extern const RGBColor_TypeDef LED_BLUE;
extern const RGBColor_TypeDef LED_WHITE;
extern void Set_LEDColor(uint16_t LedId, RGBColor_TypeDef Color);
extern void LED_Set(uint16_t LedId, RGBColor_TypeDef Color);
extern void LED_Blink(uint16_t LedId, RGBColor_TypeDef Color);
extern void RGB_Reflash(void);
extern void LED_LITTLE_TEST(void);
extern void led_matrix_rst();
#endif

99
my_pro/indicator_led.c Normal file
View File

@ -0,0 +1,99 @@
#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);
}

11
my_pro/indicator_led.h Normal file
View File

@ -0,0 +1,11 @@
#include <rtthread.h>
#include <drv_matrix_led.h>
extern void LED_Set(uint16_t LedId, RGBColor_TypeDef Color);
extern void LED_SetMore(uint16_t LedId_begin,uint16_t LedId_end, RGBColor_TypeDef Color);
extern void LED_Blink(uint16_t LedId, RGBColor_TypeDef Color);
extern void LED_BlinkMore(uint16_t LedId_begin, uint16_t LedId_end, RGBColor_TypeDef Color);
extern int led_init(void);
extern const RGBColor_TypeDef LED_OFF;
extern const RGBColor_TypeDef LED_ON;

View File

@ -15,38 +15,14 @@
#include "infrared.h"
#include <ulog.h>
#include "my_func.h"
#include "drv_matrix_led.h"
#include "indicator_led.h"
#define THREAD_PRIORITY 25
#define THREAD_STACK_SIZE 4096
#define THREAD_TIMESLICE 5
#define BSP_USING_ONBOARD_LED_MATRIX
// #define BSP_USING_ONBOARD_LED_MATRIX
/* define LED */
enum{
EXTERN_LED_0,
EXTERN_LED_1,
EXTERN_LED_2,
EXTERN_LED_3,
EXTERN_LED_4,
EXTERN_LED_5,
EXTERN_LED_6,
EXTERN_LED_7,
EXTERN_LED_8,
EXTERN_LED_9,
EXTERN_LED_10,
EXTERN_LED_11,
EXTERN_LED_12,
EXTERN_LED_13,
EXTERN_LED_14,
EXTERN_LED_15,
EXTERN_LED_16,
EXTERN_LED_17,
EXTERN_LED_18,
};
rt_thread_t led_matrix_thread = RT_NULL;
rt_thread_t MQTT_Thread = RT_NULL;
rt_thread_t Snake_Thread = RT_NULL;
rt_thread_t Infrared_Thread = RT_NULL;
@ -432,42 +408,7 @@ void cdc_entry(void *parameter)
rt_thread_mdelay(500);
}
}
void led_matrix_example_entry(void *parameter)
{
// while (1)
// {
// RGB_Show_64(); // 调用RGB灯板显示函数
// rt_thread_mdelay(500);
// }
// int count = 0;
// while (1)
// {
// for (int i = EXTERN_LED_0; i <= EXTERN_LED_18; i++)
// {
// switch (count)
// {
// case 0:
// Set_LEDColor(i, LED_RED);
// break;
// case 1:
// Set_LEDColor(i, LED_GREEN);
// break;
// case 2:
// Set_LEDColor(i, LED_BLUE);
// break;
// default:
// return;
// break;
// }
// RGB_Reflash();
// rt_thread_delay(20);
// }
// count = (count + 1) % 3;
// }
LED_LITTLE_TEST();
}
// /* 用于接收消息的信号量 */
// static struct rt_semaphore rx_sem;
// /* 接收数据回调函数 */
@ -635,18 +576,7 @@ void inf_init(void)
}
}
MSH_CMD_EXPORT_ALIAS(inf_init, inf, "Infrared");
int led_init(void)
{
led_matrix_thread = rt_thread_create("led matrix demo", led_matrix_example_entry, RT_NULL, 1024, 20, 20);
if(led_matrix_thread == RT_NULL)
{
rt_kprintf("led matrix demo thread creat failed!\n");
return 0;
}
rt_thread_mdelay(200); // avoid multi-thread on LED matrix transmit.
rt_thread_startup(led_matrix_thread);
}
void tst_init(void)
{
Test_Thread = rt_thread_create("Test_Thread", test_lcd, RT_NULL, THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE);

View File

@ -1,7 +1,34 @@
#include "drv_matrix_led.h"
#include"indicator_led.h"
// #include "drv_matrix_led.h"
#include <stdlib.h>
void ledblink(int argc, char **argv){//设置/查询设备名称
void ledblinkm(int argc, char **argv){
int LedId_begin = atoi(argv[2]);
int LedId_end = atoi(argv[3]);
if(!rt_strcmp(argv[1],"RED"))
{
LED_BlinkMore(LedId_begin,LedId_end,LED_RED);
}
else if(!rt_strcmp(argv[1],"BLUE"))
{
LED_BlinkMore(LedId_begin,LED_BLUE);
}
}
MSH_CMD_EXPORT_ALIAS(ledblinkm,LEDB, "BLINK LedId Color");
void ledsetm(int argc, char **argv){
int LedId_begin = atoi(argv[2]);
int LedId_end = atoi(argv[3]);
if(!rt_strcmp(argv[1],"RED"))
{
LED_SetMore(LedId_begin,LedId_end,LED_RED);
}
else if(!rt_strcmp(argv[1],"BLUE"))
{
LED_SetMore(LedId_begin,LED_BLUE);
}
}
MSH_CMD_EXPORT_ALIAS(ledblinkm,LEDB, "BLINK LedId Color");
// if(argc < 2){
// const rt_uint8_t Buffer[] = "AT+NAME\r\n";
// rt_uint8_t len = rt_strlen((const char*)Buffer);