wip good fade out fade in lamp bar

This commit is contained in:
Yunhorn 2025-07-24 19:14:19 +08:00
parent 1d55ed1d72
commit 0a8435ada1
7 changed files with 77 additions and 72 deletions

View File

@ -144,7 +144,7 @@ void Error_Handler(void);
#define STS_LAMP_BAR_PWM_TIM_PERIOD (240 - 1)
#define STS_LAMP_BAR_HTIM htim1
#define STS_LAMP_BAR_LED_NUM (60) //60 for 46CM length LED strip
#define LED_COUNT 15 // for 30 cm lamp bar
#define LED_COUNT 18 // for 30 cm lamp bar
#define WSDATA_PORT_PIN_PA8
//#define WSDATA_PORT_PIN_PA9

View File

@ -29,7 +29,7 @@ extern "C" {
#define DEFAULT_SATURATION 50 // 0 - 100 SSaturation, 0~100
#define DEFAULT_BRIGHTNESS 50 // 0 - 100 VValue of lightness, 0~100
#define DEFAULT_LUMINANCE_LEVEL (30)
#define DEFAULT_LUMINANCE_LEVEL (255)
#define STS_Status_Door_Close (0) //Normal Close NC:Open **2024-07-15 changed
#define STS_Status_Door_Open (1) //Normal Close NC:Close **2024-07-15 changed
#define STS_Status_SOS_Pushdown (0) //Normal Open NO:Open
@ -40,22 +40,23 @@ extern "C" {
#define STS_Status_Alarm_Reset_Release (1) //Normal Open NO:Close#
enum sts_lamp_color {
STS_DARK = 0, //灭0, Code 0x00
STS_GREEN, //绿1 0 1 0 code 0x01 0b0000 0001
STS_RED, //红2 1 0 0 code 0x02 0b0000 0010
STS_BLUE, //蓝3 0 0 1 code 0x03 0b0000 0011
STS_YELLOW, //黄4 1 1 0 code 0x04 0b0000 0100
STS_PINK, //紫5 1 0 1 code 0x05 0b0000 0101
STS_CYAN, //青6 0 1 1 code 0x06 0b0000 0110
STS_WHITE, //白7 1 1 1 code 0x07 0b0000 0111
STS_COLOR_MAX, //8: MAX NUM OF COLORS 0x08 0b0000 1000
STS_DARK = 0, //灭0, 0 0 0 0 Code 0x00
STS_GREEN, //绿1, 0 0 0 1 code 0x01 0b0000 0001
STS_RED, //红2, 0 0 1 0 code 0x02 0b0000 0010
STS_BLUE, //蓝3, 0 0 1 1 code 0x03 0b0000 0011
STS_YELLOW, //黄4, 0 1 0 0 code 0x04 0b0000 0100
STS_PINK, //紫5, 0 1 0 1 code 0x05 0b0000 0101
STS_CYAN, //青6, 0 1 1 0 code 0x06 0b0000 0110
STS_WHITE, //白7, 0 1 1 1 code 0x07 0b0000 0111
STS_COLOR_MAX, //8: 8, 1 0 0 0 MAX NUM OF COLORS 0x08 0b0000 1000
STS_GREEN_DARK=0x10, //0b0001 0000 GREEN DARK
STS_RED_DARK=0x20, //0b0010 0000,
STS_RED_GREEN=0x21,
STS_RED_BLUE=0x23, //0b0010 0011 RED BLUE FLASH
STS_RED_DARK=0x20, //0b0010 0000,RED DARK
STS_RED_GREEN=0x21, //0b0010 0001, RED, GREEN
STS_RED_BLUE=0x23, //0b0010 0011 RED BLUE
STS_RED_WHITE=0x27, //0b0010 0111 RED WHITE
STS_BLUE_DARK=0x30, //0b0011 0000 BLUE DARK
STS_BLUE_GREEN=0x31,
STS_BLUE_GREEN=0x31, //0b0011 0001 BLUE GREEN
STS_GREENDARK=0x41, // GREEN FLASH 'A'
STS_REDDARK=0x42, // RED FLASH 'B'

View File

@ -99,9 +99,9 @@ int main(void)
/* USER CODE BEGIN 2 */
STS_Sensor_Init();
STS_Sensor_Prepare();
while(1)
//while(1)
{
STS_Lamp_Bar_Self_Test_Fade();
// STS_Lamp_Bar_Self_Test_Fade();
}
/* USER CODE END 2 */
#if 0

View File

@ -178,48 +178,47 @@ void STS_Lamp_Bar_Set_RGB_Color_Flow(void)
static void STS_Lamp_Bar_Set_RGB_Color_FadeIn(uint8_t red, uint8_t green, uint8_t blue, uint8_t start_position, uint8_t fade_length)
{
// set tail length 1/3
uint8_t tail_len = LED_COUNT /2;
uint8_t fade_len = fade_length;
for (uint8_t idx = LED_COUNT; idx >0 ; idx--)
for (uint8_t idx = 0; idx < LED_COUNT ; idx++)
{
if (idx > tail_len) {
if (idx >= start_position) {
// the most far tail end, the darker, the most head/first, the brighter
uint8_t rev = tail_len + 1 - idx;
uint8_t rev = idx - fade_len ;
uint8_t lin = 0xFF - (rev * 0xFF / tail_len);
uint8_t lin = (rev * 0xFF / fade_len);
uint8_t bri = (lin * lin) >> 8;
STS_WS2812B_Set_RGB((red*bri)>>8, (green*bri)>>8, (blue*bri)>>8, ((idx + start_position)%LED_COUNT));
STS_WS2812B_Set_RGB((red*bri)>>8, (green*bri)>>8, (blue*bri)>>8, ((idx)));
} else {
// longer than tail, set to dark
STS_WS2812B_Set_RGB(red, green, blue, idx);
// shorter than tail, set to dark
//STS_WS2812B_Set_RGB(red, green, blue, idx);
STS_WS2812B_Set_RGB(0, 0, 0, idx);
}
}
}
static void STS_Lamp_Bar_Set_RGB_Color_FadeOut(uint8_t red, uint8_t green, uint8_t blue, uint8_t start_position, uint8_t fade_length)
{
// set tail length 1/3
uint8_t tail_len = LED_COUNT /2;
uint8_t fade_len = fade_length;
for (uint8_t idx = 0; idx < LED_COUNT; idx++)
{
if (idx < tail_len) {
if ((idx >= start_position) && (idx <= (start_position+fade_len))) {
// the most far tail end, the darker, the most head/first, the brighter
uint8_t rev = tail_len - 1 - idx;
//uint8_t lin = 0xFF - (rev * 0xFF / tail_len);
//uint8_t bri = (lin * lin) >> 8;
uint8_t lin = (idx/(2*tail_len));
uint8_t bri = lin;
uint8_t rev = fade_len -idx - start_position;
uint8_t lin = (rev * 0xFF / fade_length);
uint8_t bri = (lin * lin) >> 8;
//uint8_t lin = (idx/(2*tail_len));
//uint8_t bri = lin;
//STS_WS2812B_Set_RGB((red*bri)>>8, (green*bri)>>8, (blue*bri)>>8, ((idx + start_position)%LED_COUNT));
STS_WS2812B_Set_RGB((red*bri), (green*bri), (blue*bri), ((idx + start_position)%LED_COUNT));
STS_WS2812B_Set_RGB((red*bri)>>8, (green*bri)>>8, (blue*bri)>>8, ((idx)));
//STS_WS2812B_Set_RGB((red*bri), (green*bri), (blue*bri), ((idx + start_position)%LED_COUNT));
} else {
// longer than tail, set to dark
STS_WS2812B_Set_RGB(red, green, blue, idx);
} else if ((idx < start_position)||(idx > fade_len)) {
// shorter than start position or longer than fade length, set to dark
//STS_WS2812B_Set_RGB(red, green, blue, idx);
STS_WS2812B_Set_RGB(0, 0, 0, idx);
}
}
}
@ -231,7 +230,6 @@ void STS_Lamp_Bar_Refresh(void)
void STS_Lamp_Bar_Set_STS_RGB_Color_FadeIn(uint8_t sts_lamp_color, uint8_t max_lum_level, uint8_t fade_length)
{
if (sts_lamp_color <=8)
{
switch (sts_lamp_color)
@ -240,27 +238,28 @@ void STS_Lamp_Bar_Set_STS_RGB_Color_FadeIn(uint8_t sts_lamp_color, uint8_t max_l
STS_Lamp_Bar_Set_RGB_Color(0x0, 0x0, 0x0);
break;
case STS_GREEN:
STS_Lamp_Bar_Set_RGB_Color_FadeIn(0x0, max_lum_level, 0x0, LED_COUNT/2, LED_COUNT/2);
STS_Lamp_Bar_Set_RGB_Color_FadeIn(0x0, max_lum_level, 0x0, LED_COUNT/2, fade_length);
break;
case STS_RED:
STS_Lamp_Bar_Set_RGB_Color_FadeIn(max_lum_level, 0x0, 0x0, LED_COUNT/2, LED_COUNT/2);
STS_Lamp_Bar_Set_RGB_Color_FadeIn(max_lum_level, 0x0, 0x0, LED_COUNT/2, fade_length);
break;
case STS_BLUE:
STS_Lamp_Bar_Set_RGB_Color_FadeIn(0x0, 0x0, max_lum_level, LED_COUNT/2, LED_COUNT/2);
STS_Lamp_Bar_Set_RGB_Color_FadeIn(0x0, 0x0, max_lum_level, LED_COUNT/2, fade_length);
break;
case STS_YELLOW:
STS_Lamp_Bar_Set_RGB_Color_FadeIn(max_lum_level, max_lum_level, 0x0, LED_COUNT/2, LED_COUNT/2);
STS_Lamp_Bar_Set_RGB_Color_FadeIn(max_lum_level, max_lum_level, 0x0, LED_COUNT/2, fade_length);
break;
case STS_PINK:
STS_Lamp_Bar_Set_RGB_Color_FadeIn(max_lum_level, 0x0, max_lum_level, LED_COUNT/2, LED_COUNT/2);
STS_Lamp_Bar_Set_RGB_Color_FadeIn(max_lum_level, 0x0, max_lum_level, LED_COUNT/2, fade_length);
break;
case STS_CYAN:
STS_Lamp_Bar_Set_RGB_Color_FadeIn(0x0, max_lum_level, max_lum_level, LED_COUNT/2, LED_COUNT/2);
STS_Lamp_Bar_Set_RGB_Color_FadeIn(0x0, max_lum_level, max_lum_level, LED_COUNT/2, fade_length);
break;
case STS_WHITE:
STS_Lamp_Bar_Set_RGB_Color_FadeIn(max_lum_level, max_lum_level, max_lum_level, LED_COUNT/2, LED_COUNT/2);
STS_Lamp_Bar_Set_RGB_Color_FadeIn(max_lum_level, max_lum_level, max_lum_level, LED_COUNT/2, fade_length);
break;
}
}
}
@ -274,27 +273,28 @@ void STS_Lamp_Bar_Set_STS_RGB_Color_FadeOut(uint8_t sts_lamp_color, uint8_t max_
STS_Lamp_Bar_Set_RGB_Color(0x0, 0x0, 0x0);
break;
case STS_GREEN:
STS_Lamp_Bar_Set_RGB_Color_FadeOut(0x0, max_lum_level, 0x0, 0, LED_COUNT/2);
STS_Lamp_Bar_Set_RGB_Color_FadeOut(0x0, max_lum_level, 0x0, 0, fade_length);
break;
case STS_RED:
STS_Lamp_Bar_Set_RGB_Color_FadeOut(max_lum_level, 0x0, 0x0, 0, LED_COUNT/2);
STS_Lamp_Bar_Set_RGB_Color_FadeOut(max_lum_level, 0x0, 0x0, 0, fade_length);
break;
case STS_BLUE:
STS_Lamp_Bar_Set_RGB_Color_FadeOut( 0x0, 0x0, max_lum_level, 0, LED_COUNT/2);
STS_Lamp_Bar_Set_RGB_Color_FadeOut( 0x0, 0x0, max_lum_level, 0, fade_length);
break;
case STS_YELLOW:
STS_Lamp_Bar_Set_RGB_Color_FadeOut(max_lum_level, max_lum_level, 0x0, 0, LED_COUNT/2);
STS_Lamp_Bar_Set_RGB_Color_FadeOut(max_lum_level, max_lum_level, 0x0, 0, fade_length);
break;
case STS_PINK:
STS_Lamp_Bar_Set_RGB_Color_FadeOut(max_lum_level, 0x0, max_lum_level, 0, LED_COUNT/2);
STS_Lamp_Bar_Set_RGB_Color_FadeOut(max_lum_level, 0x0, max_lum_level, 0, fade_length);
break;
case STS_CYAN:
STS_Lamp_Bar_Set_RGB_Color_FadeOut(0x0, max_lum_level, max_lum_level, 0, LED_COUNT/2);
STS_Lamp_Bar_Set_RGB_Color_FadeOut(0x0, max_lum_level, max_lum_level, 0, fade_length);
break;
case STS_WHITE:
STS_Lamp_Bar_Set_RGB_Color_FadeOut(max_lum_level, max_lum_level, max_lum_level, 0, LED_COUNT/2);
STS_Lamp_Bar_Set_RGB_Color_FadeOut(max_lum_level, max_lum_level, max_lum_level, 0, fade_length);
break;
}
}
}
@ -349,7 +349,7 @@ void STS_Lamp_Bar_Self_Test_Simple(void)
lum_level = 1;
do {
STS_Lamp_Bar_Set_STS_RGB_Color(color, lum_level);
HAL_Delay(30);
HAL_Delay(20);
lum_level += 10;
} while (lum_level < 255);
STS_Lamp_Bar_Set_Dark();
@ -360,31 +360,31 @@ void STS_Lamp_Bar_Self_Test_Simple(void)
void STS_Lamp_Bar_Self_Test_Fade(void)
{
uint8_t color=0, lum_level=DEFAULT_LUMINANCE_LEVEL;
APP_LOG(TS_OFF, VLEVEL_H, "\r\n [#1] RGB Space Fade Out Fade In Testing Start\r\n");
APP_LOG(TS_OFF, VLEVEL_M, "\r\n [#1] RGB Space Fade Out Testing Start\r\n");
for (color=STS_GREEN; color < STS_COLOR_MAX; color++)
{
lum_level = 10;
do {
STS_Lamp_Bar_Set_STS_RGB_Color_FadeOut(color, lum_level, 10);
HAL_Delay(1000);
lum_level += 20;
STS_Lamp_Bar_Set_STS_RGB_Color_FadeOut(color, lum_level, LED_COUNT/2);
HAL_Delay(100);
lum_level += 10;
} while (lum_level < 99);
STS_Lamp_Bar_Set_Dark();
}
APP_LOG(TS_OFF, VLEVEL_M, "\r\n [#1] RGB Space Fade In Testing Start\r\n");
for (color=STS_GREEN; color < STS_COLOR_MAX; color++)
{
lum_level = 10;
do {
STS_Lamp_Bar_Set_STS_RGB_Color_FadeIn(color, lum_level, 10);
HAL_Delay(1000);
lum_level += 20;
STS_Lamp_Bar_Set_STS_RGB_Color_FadeIn(color, lum_level, LED_COUNT/2);
HAL_Delay(100);
lum_level += 10;
} while (lum_level < 99);
STS_Lamp_Bar_Set_Dark();
}
APP_LOG(TS_OFF, VLEVEL_H, "\r\n [#1] RGB Space Fade Out Fade In Testing Finished\r\n");
APP_LOG(TS_OFF, VLEVEL_M, "\r\n [#1] RGB Space Fade Out Fade In Testing Finished\r\n");
}
@ -393,7 +393,7 @@ void STS_Lamp_Bar_Self_Test(void)
uint8_t color=0, lum_level=DEFAULT_LUMINANCE_LEVEL;
APP_LOG(TS_OFF, VLEVEL_H, "\r\n YunHorn STS Indicative Lamp Self Test\r\n");
/*
STS_Lamp_Bar_Self_Test_Simple();
APP_LOG(TS_OFF, VLEVEL_H, "\r\n [#2] Scoller Testing\r\n");
@ -402,7 +402,8 @@ void STS_Lamp_Bar_Self_Test(void)
{
STS_Lamp_Bar_Scoller(color, lum_level);
}
*/
STS_Lamp_Bar_Self_Test_Fade();
APP_LOG(TS_OFF, VLEVEL_H, "\r\n [##] YunHorn STS Indicative Lamp Self Test Finished\r\n");
if ((sts_work_mode == STS_WIRED_MODE) )

View File

@ -71,9 +71,9 @@ void MX_LoRaWAN_Init(void)
/* USER CODE BEGIN MX_LoRaWAN_Init_2 */
//STS_Lamp_Bar_Self_Test_Simple();
STS_Lamp_Bar_Self_Test();
STS_Lamp_Bar_Self_Test_Fade();
//STS_Lamp_Bar_Self_Test_Fade();
/* USER CODE END MX_LoRaWAN_Init_2 */
//LoRaWAN_Init();
LoRaWAN_Init();
/* USER CODE BEGIN MX_LoRaWAN_Init_3 */
/* USER CODE END MX_LoRaWAN_Init_3 */

View File

@ -130,7 +130,9 @@ volatile sts_cfg_nvm_t sts_cfg_nvm = {
0x8C, //P[19] RSS SLIDING WINDOW CFG: 0x08 AS threshold, 0x0C as window size
}, // above 20 bytes
#ifdef ATAL
0x27, // 0x20 occupy(red:2) | color vacant (dark:0) for ATAL-HK 20241230
0x20, // 0x20 occupy(red:2) | color vacant (dark:0) for ATAL-HK 20241230
#elif defined(FADEOUT)
0x27, // 0x20 occupy(red:2) | color vacant (white:7) for SWIRE INDIGO1 BEIJING
#else
0x21, // color occupy (red:2) | color vacant (green:1) or other 0x20 occupy(red:2) | color vacant (dark:0) for ATAL-HK 20241230
#endif
@ -1275,9 +1277,10 @@ static void OnYunhornSTSLampBarColorTimerEvent(void *context)
{
#if defined(FADEOUT)
if (sts_rss_result == STS_RESULT_MOTION) {
if ((sts_rss_result == STS_RESULT_MOTION)||(sts_reed_hall_result == STS_Status_Door_Close )) {
STS_Lamp_Bar_Set_STS_RGB_Color_FadeOut(sts_lamp_bar_color, luminance_level, LED_COUNT/2);
} else if (sts_rss_result == STS_RESULT_NO_MOTION){
} else if ((sts_rss_result == STS_RESULT_NO_MOTION)||(sts_reed_hall_result == STS_Status_Door_Open )){
STS_Lamp_Bar_Set_STS_RGB_Color_FadeIn(sts_lamp_bar_color, luminance_level, LED_COUNT/2);
}
#else

Binary file not shown.