feat: 绿灯行为 — 自检慢闪 + 车辆存在指示
- 自检阶段 (loop1_INI_LOOP 或线圈未稳定): 绿灯慢闪 (500ms) - 正常工作: 有车亮, 无车灭 - 绿灯统一由 TMR15 ISR poll_green_led() 驱动, 单点控制 - 移除 vd1_task 和 loop_task 中所有手动 LEDB_ON/OFF - 移除线圈重连时的 6 次绿灯闪烁 (由黄灯故障码替代)
This commit is contained in:
@@ -143,6 +143,7 @@ uint8_t update_moving_average(uint32_t* p_sum, uint16_t* p_cnt,
|
|||||||
uint32_t* p_origin, uint32_t new_value,
|
uint32_t* p_origin, uint32_t new_value,
|
||||||
uint8_t window);
|
uint8_t window);
|
||||||
void poll_yellow_led(void);
|
void poll_yellow_led(void);
|
||||||
|
void poll_green_led(void);
|
||||||
void LEDA_ON_OFF(void);
|
void LEDA_ON_OFF(void);
|
||||||
void vd1_task(void);
|
void vd1_task(void);
|
||||||
|
|
||||||
|
|||||||
@@ -183,6 +183,41 @@ void LEDA_ON_OFF(void)
|
|||||||
LED_RED_GPIO->odt ^= LED_RED_PIN;
|
LED_RED_GPIO->odt ^= LED_RED_PIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*===========================================================================
|
||||||
|
* 绿灯指示 (LEDB, PA9)
|
||||||
|
*
|
||||||
|
* 由 TMR15 ISR 每 5ms 驱动一次,是绿灯的唯一控制入口。
|
||||||
|
*
|
||||||
|
* 模式:
|
||||||
|
* 自检中 (loop1_INI_LOOP==1 或 线圈未稳定):
|
||||||
|
* → 慢闪 (500ms 亮 / 500ms 灭)
|
||||||
|
* 正常工作:
|
||||||
|
* → 有车亮 (VD_FLAG==1), 无车灭
|
||||||
|
*===========================================================================*/
|
||||||
|
void poll_green_led(void)
|
||||||
|
{
|
||||||
|
#define GREEN_SLOW_HALF 100 // 500ms (100 × 5ms)
|
||||||
|
|
||||||
|
static uint16_t _slow_tick = 0;
|
||||||
|
|
||||||
|
/*--- 自检阶段:慢闪 ---*/
|
||||||
|
if (loop1_INI_LOOP || !g_loop_power_up_state) {
|
||||||
|
_slow_tick++;
|
||||||
|
if (_slow_tick >= GREEN_SLOW_HALF) {
|
||||||
|
_slow_tick = 0;
|
||||||
|
LED_GREEN_GPIO->odt ^= LED_GREEN_PIN; // toggle
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*--- 正常工作:车辆存在指示 ---*/
|
||||||
|
_slow_tick = 0;
|
||||||
|
if (loop1_VD_FLAG)
|
||||||
|
LEDB_ON;
|
||||||
|
else
|
||||||
|
LEDB_OFF;
|
||||||
|
}
|
||||||
|
|
||||||
/*===========================================================================
|
/*===========================================================================
|
||||||
* 黄灯故障指示 (LEDC, PA10)
|
* 黄灯故障指示 (LEDC, PA10)
|
||||||
*
|
*
|
||||||
@@ -535,8 +570,9 @@ void TMR15_GLOBAL_IRQHandler(void)
|
|||||||
loop1_LOOP_OK = 0;
|
loop1_LOOP_OK = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--- 硬件驱动:呼吸灯 + 故障灯 ---*/
|
/*--- 硬件驱动:呼吸灯 + 指示灯 ---*/
|
||||||
poll_red_pwm();
|
poll_red_pwm();
|
||||||
|
poll_green_led();
|
||||||
poll_yellow_led();
|
poll_yellow_led();
|
||||||
|
|
||||||
tmr_flag_clear(TMR15, TMR_OVF_FLAG);
|
tmr_flag_clear(TMR15, TMR_OVF_FLAG);
|
||||||
@@ -578,7 +614,6 @@ void vd1_task(void)
|
|||||||
|
|
||||||
loop1_VD_FLAG = 1;
|
loop1_VD_FLAG = 1;
|
||||||
loop1_FLAG_IN = 1;
|
loop1_FLAG_IN = 1;
|
||||||
LEDB_ON;
|
|
||||||
|
|
||||||
/* 有限存在计时(非安全复位模式下) */
|
/* 有限存在计时(非安全复位模式下) */
|
||||||
if (!SET_SAFE) {
|
if (!SET_SAFE) {
|
||||||
@@ -613,7 +648,6 @@ void vd1_task(void)
|
|||||||
loop1_FLAG_OUT = 1;
|
loop1_FLAG_OUT = 1;
|
||||||
loop1_VD_HOLD = 0;
|
loop1_VD_HOLD = 0;
|
||||||
loop1_LC_HOLD = 0;
|
loop1_LC_HOLD = 0;
|
||||||
LEDB_OFF;
|
|
||||||
|
|
||||||
loop1_ORG_CNT = 0;
|
loop1_ORG_CNT = 0;
|
||||||
loop1_ORG_SUM = 0;
|
loop1_ORG_SUM = 0;
|
||||||
@@ -642,14 +676,6 @@ void loop_task_function(void *pvParameters)
|
|||||||
if (loop1_LOOP_OK) {
|
if (loop1_LOOP_OK) {
|
||||||
/*--- 线圈重连 ---*/
|
/*--- 线圈重连 ---*/
|
||||||
if (!loop1_LOOP_OK0) {
|
if (!loop1_LOOP_OK0) {
|
||||||
/* 线圈恢复:绿灯闪烁提示 */
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < 6; i++) {
|
|
||||||
LEDB_ON;
|
|
||||||
vTaskDelay(200);
|
|
||||||
LEDB_OFF;
|
|
||||||
vTaskDelay(200);
|
|
||||||
}
|
|
||||||
loop1_LOOP_OK0 = 1;
|
loop1_LOOP_OK0 = 1;
|
||||||
g_disconnect_active = 0; // 重连,清除断开标记
|
g_disconnect_active = 0; // 重连,清除断开标记
|
||||||
}
|
}
|
||||||
@@ -673,7 +699,6 @@ void loop_task_function(void *pvParameters)
|
|||||||
loop1_VD_FLAG = 0;
|
loop1_VD_FLAG = 0;
|
||||||
RLY1_OFF;
|
RLY1_OFF;
|
||||||
RLY2_OFF;
|
RLY2_OFF;
|
||||||
LEDB_OFF;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 断开计数规则:
|
* 断开计数规则:
|
||||||
|
|||||||
Reference in New Issue
Block a user