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,
|
||||
uint8_t window);
|
||||
void poll_yellow_led(void);
|
||||
void poll_green_led(void);
|
||||
void LEDA_ON_OFF(void);
|
||||
void vd1_task(void);
|
||||
|
||||
|
||||
@@ -183,6 +183,41 @@ void LEDA_ON_OFF(void)
|
||||
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)
|
||||
*
|
||||
@@ -535,8 +570,9 @@ void TMR15_GLOBAL_IRQHandler(void)
|
||||
loop1_LOOP_OK = 0;
|
||||
}
|
||||
|
||||
/*--- 硬件驱动:呼吸灯 + 故障灯 ---*/
|
||||
/*--- 硬件驱动:呼吸灯 + 指示灯 ---*/
|
||||
poll_red_pwm();
|
||||
poll_green_led();
|
||||
poll_yellow_led();
|
||||
|
||||
tmr_flag_clear(TMR15, TMR_OVF_FLAG);
|
||||
@@ -578,7 +614,6 @@ void vd1_task(void)
|
||||
|
||||
loop1_VD_FLAG = 1;
|
||||
loop1_FLAG_IN = 1;
|
||||
LEDB_ON;
|
||||
|
||||
/* 有限存在计时(非安全复位模式下) */
|
||||
if (!SET_SAFE) {
|
||||
@@ -613,7 +648,6 @@ void vd1_task(void)
|
||||
loop1_FLAG_OUT = 1;
|
||||
loop1_VD_HOLD = 0;
|
||||
loop1_LC_HOLD = 0;
|
||||
LEDB_OFF;
|
||||
|
||||
loop1_ORG_CNT = 0;
|
||||
loop1_ORG_SUM = 0;
|
||||
@@ -642,14 +676,6 @@ void loop_task_function(void *pvParameters)
|
||||
if (loop1_LOOP_OK) {
|
||||
/*--- 线圈重连 ---*/
|
||||
if (!loop1_LOOP_OK0) {
|
||||
/* 线圈恢复:绿灯闪烁提示 */
|
||||
int i;
|
||||
for (i = 0; i < 6; i++) {
|
||||
LEDB_ON;
|
||||
vTaskDelay(200);
|
||||
LEDB_OFF;
|
||||
vTaskDelay(200);
|
||||
}
|
||||
loop1_LOOP_OK0 = 1;
|
||||
g_disconnect_active = 0; // 重连,清除断开标记
|
||||
}
|
||||
@@ -673,7 +699,6 @@ void loop_task_function(void *pvParameters)
|
||||
loop1_VD_FLAG = 0;
|
||||
RLY1_OFF;
|
||||
RLY2_OFF;
|
||||
LEDB_OFF;
|
||||
|
||||
/*
|
||||
* 断开计数规则:
|
||||
|
||||
Reference in New Issue
Block a user