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_PWM_TIM_PERIOD (240 - 1)
#define STS_LAMP_BAR_HTIM htim1 #define STS_LAMP_BAR_HTIM htim1
#define STS_LAMP_BAR_LED_NUM (60) //60 for 46CM length LED strip #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_PA8
//#define WSDATA_PORT_PIN_PA9 //#define WSDATA_PORT_PIN_PA9

View File

@ -29,7 +29,7 @@ extern "C" {
#define DEFAULT_SATURATION 50 // 0 - 100 SSaturation, 0~100 #define DEFAULT_SATURATION 50 // 0 - 100 SSaturation, 0~100
#define DEFAULT_BRIGHTNESS 50 // 0 - 100 VValue of lightness, 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_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_Door_Open (1) //Normal Close NC:Close **2024-07-15 changed
#define STS_Status_SOS_Pushdown (0) //Normal Open NO:Open #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# #define STS_Status_Alarm_Reset_Release (1) //Normal Open NO:Close#
enum sts_lamp_color { enum sts_lamp_color {
STS_DARK = 0, //灭0, Code 0x00 STS_DARK = 0, //灭0, 0 0 0 0 Code 0x00
STS_GREEN, //绿1 0 1 0 code 0x01 0b0000 0001 STS_GREEN, //绿1, 0 0 0 1 code 0x01 0b0000 0001
STS_RED, //红2 1 0 0 code 0x02 0b0000 0010 STS_RED, //红2, 0 0 1 0 code 0x02 0b0000 0010
STS_BLUE, //蓝3 0 0 1 code 0x03 0b0000 0011 STS_BLUE, //蓝3, 0 0 1 1 code 0x03 0b0000 0011
STS_YELLOW, //黄4 1 1 0 code 0x04 0b0000 0100 STS_YELLOW, //黄4, 0 1 0 0 code 0x04 0b0000 0100
STS_PINK, //紫5 1 0 1 code 0x05 0b0000 0101 STS_PINK, //紫5, 0 1 0 1 code 0x05 0b0000 0101
STS_CYAN, //青6 0 1 1 code 0x06 0b0000 0110 STS_CYAN, //青6, 0 1 1 0 code 0x06 0b0000 0110
STS_WHITE, //白7 1 1 1 code 0x07 0b0000 0111 STS_WHITE, //白7, 0 1 1 1 code 0x07 0b0000 0111
STS_COLOR_MAX, //8: MAX NUM OF COLORS 0x08 0b0000 1000 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_GREEN_DARK=0x10, //0b0001 0000 GREEN DARK
STS_RED_DARK=0x20, //0b0010 0000, STS_RED_DARK=0x20, //0b0010 0000,RED DARK
STS_RED_GREEN=0x21, STS_RED_GREEN=0x21, //0b0010 0001, RED, GREEN
STS_RED_BLUE=0x23, //0b0010 0011 RED BLUE FLASH 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_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_GREENDARK=0x41, // GREEN FLASH 'A'
STS_REDDARK=0x42, // RED FLASH 'B' STS_REDDARK=0x42, // RED FLASH 'B'

View File

@ -99,9 +99,9 @@ int main(void)
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN 2 */
STS_Sensor_Init(); STS_Sensor_Init();
STS_Sensor_Prepare(); STS_Sensor_Prepare();
while(1) //while(1)
{ {
STS_Lamp_Bar_Self_Test_Fade(); // STS_Lamp_Bar_Self_Test_Fade();
} }
/* USER CODE END 2 */ /* USER CODE END 2 */
#if 0 #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) 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 fade_len = fade_length;
uint8_t tail_len = LED_COUNT /2;
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 // 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; 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 { } else {
// longer than tail, set to dark // shorter than tail, set to dark
STS_WS2812B_Set_RGB(red, green, blue, idx); //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) 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 fade_len = fade_length;
uint8_t tail_len = LED_COUNT /2;
for (uint8_t idx = 0; idx < LED_COUNT; idx++) 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 // the most far tail end, the darker, the most head/first, the brighter
uint8_t rev = tail_len - 1 - idx; uint8_t rev = fade_len -idx - start_position;
//uint8_t lin = 0xFF - (rev * 0xFF / tail_len); uint8_t lin = (rev * 0xFF / fade_length);
//uint8_t bri = (lin * lin) >> 8; uint8_t bri = (lin * lin) >> 8;
uint8_t lin = (idx/(2*tail_len)); //uint8_t lin = (idx/(2*tail_len));
uint8_t bri = lin; //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)>>8, (green*bri)>>8, (blue*bri)>>8, ((idx)));
STS_WS2812B_Set_RGB((red*bri), (green*bri), (blue*bri), ((idx + start_position)%LED_COUNT)); //STS_WS2812B_Set_RGB((red*bri), (green*bri), (blue*bri), ((idx + start_position)%LED_COUNT));
} else { } else if ((idx < start_position)||(idx > fade_len)) {
// longer than tail, set to dark // shorter than start position or longer than fade length, set to dark
STS_WS2812B_Set_RGB(red, green, blue, idx); //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) 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) if (sts_lamp_color <=8)
{ {
switch (sts_lamp_color) 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); STS_Lamp_Bar_Set_RGB_Color(0x0, 0x0, 0x0);
break; break;
case STS_GREEN: 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; break;
case STS_RED: 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; break;
case STS_BLUE: 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; break;
case STS_YELLOW: 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; break;
case STS_PINK: 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; break;
case STS_CYAN: 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; break;
case STS_WHITE: 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; 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); STS_Lamp_Bar_Set_RGB_Color(0x0, 0x0, 0x0);
break; break;
case STS_GREEN: 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; break;
case STS_RED: 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; break;
case STS_BLUE: 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; break;
case STS_YELLOW: 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; break;
case STS_PINK: 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; break;
case STS_CYAN: 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; break;
case STS_WHITE: 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; break;
} }
} }
} }
@ -349,7 +349,7 @@ void STS_Lamp_Bar_Self_Test_Simple(void)
lum_level = 1; lum_level = 1;
do { do {
STS_Lamp_Bar_Set_STS_RGB_Color(color, lum_level); STS_Lamp_Bar_Set_STS_RGB_Color(color, lum_level);
HAL_Delay(30); HAL_Delay(20);
lum_level += 10; lum_level += 10;
} while (lum_level < 255); } while (lum_level < 255);
STS_Lamp_Bar_Set_Dark(); 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) void STS_Lamp_Bar_Self_Test_Fade(void)
{ {
uint8_t color=0, lum_level=DEFAULT_LUMINANCE_LEVEL; 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++) for (color=STS_GREEN; color < STS_COLOR_MAX; color++)
{ {
lum_level = 10; lum_level = 10;
do { do {
STS_Lamp_Bar_Set_STS_RGB_Color_FadeOut(color, lum_level, 10); STS_Lamp_Bar_Set_STS_RGB_Color_FadeOut(color, lum_level, LED_COUNT/2);
HAL_Delay(1000); HAL_Delay(100);
lum_level += 20; lum_level += 10;
} while (lum_level < 99); } while (lum_level < 99);
STS_Lamp_Bar_Set_Dark(); 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++) for (color=STS_GREEN; color < STS_COLOR_MAX; color++)
{ {
lum_level = 10; lum_level = 10;
do { do {
STS_Lamp_Bar_Set_STS_RGB_Color_FadeIn(color, lum_level, 10); STS_Lamp_Bar_Set_STS_RGB_Color_FadeIn(color, lum_level, LED_COUNT/2);
HAL_Delay(1000); HAL_Delay(100);
lum_level += 20; lum_level += 10;
} while (lum_level < 99); } while (lum_level < 99);
STS_Lamp_Bar_Set_Dark(); 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; 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"); APP_LOG(TS_OFF, VLEVEL_H, "\r\n YunHorn STS Indicative Lamp Self Test\r\n");
/*
STS_Lamp_Bar_Self_Test_Simple(); STS_Lamp_Bar_Self_Test_Simple();
APP_LOG(TS_OFF, VLEVEL_H, "\r\n [#2] Scoller Testing\r\n"); 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_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"); APP_LOG(TS_OFF, VLEVEL_H, "\r\n [##] YunHorn STS Indicative Lamp Self Test Finished\r\n");
if ((sts_work_mode == STS_WIRED_MODE) ) 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 */ /* USER CODE BEGIN MX_LoRaWAN_Init_2 */
//STS_Lamp_Bar_Self_Test_Simple(); //STS_Lamp_Bar_Self_Test_Simple();
STS_Lamp_Bar_Self_Test(); STS_Lamp_Bar_Self_Test();
STS_Lamp_Bar_Self_Test_Fade(); //STS_Lamp_Bar_Self_Test_Fade();
/* USER CODE END MX_LoRaWAN_Init_2 */ /* USER CODE END MX_LoRaWAN_Init_2 */
//LoRaWAN_Init(); LoRaWAN_Init();
/* USER CODE BEGIN MX_LoRaWAN_Init_3 */ /* USER CODE BEGIN MX_LoRaWAN_Init_3 */
/* USER CODE END 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 0x8C, //P[19] RSS SLIDING WINDOW CFG: 0x08 AS threshold, 0x0C as window size
}, // above 20 bytes }, // above 20 bytes
#ifdef ATAL #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 #else
0x21, // color occupy (red:2) | color vacant (green:1) or other 0x20 occupy(red:2) | color vacant (dark:0) for ATAL-HK 20241230 0x21, // color occupy (red:2) | color vacant (green:1) or other 0x20 occupy(red:2) | color vacant (dark:0) for ATAL-HK 20241230
#endif #endif
@ -1275,9 +1277,10 @@ static void OnYunhornSTSLampBarColorTimerEvent(void *context)
{ {
#if defined(FADEOUT) #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); 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); STS_Lamp_Bar_Set_STS_RGB_Color_FadeIn(sts_lamp_bar_color, luminance_level, LED_COUNT/2);
} }
#else #else

Binary file not shown.