feat: 更新红外传感器逻辑,优化状态判断及初始化

This commit is contained in:
2026-04-14 19:46:16 +08:00
parent a2328edbd7
commit 91151c250a
3 changed files with 22 additions and 15 deletions

View File

@@ -53,17 +53,23 @@ uint8_t track_ir_get_line_mask(void)
track_ir_state_t track_ir_basic_judge(void)
{
uint8_t line_mask = track_ir_get_line_mask();
uint8_t left_mask = line_mask & (TRACK_IR_H4_BIT | TRACK_IR_H3_BIT);
uint8_t right_mask = line_mask & (TRACK_IR_H2_BIT | TRACK_IR_H1_BIT);
if (line_mask == 0U) {
/*
* 根据用户描述:超出范围输出低电平(等同于黑线信号)。
* 如果四路全为低电平line_mask == 0x0F则判定为“超出范围”或“丢线”。
*/
if (line_mask == (TRACK_IR_H1_BIT | TRACK_IR_H2_BIT | TRACK_IR_H3_BIT | TRACK_IR_H4_BIT)) {
return TRACK_IR_STATE_LOST;
}
if (line_mask == (TRACK_IR_H1_BIT | TRACK_IR_H2_BIT | TRACK_IR_H3_BIT | TRACK_IR_H4_BIT)) {
return TRACK_IR_STATE_CROSS;
/* 全高电平(未检测到黑线) */
if (line_mask == 0U) {
return TRACK_IR_STATE_CENTER; // 或者根据业务逻辑定义为其他状态
}
uint8_t left_mask = line_mask & (TRACK_IR_H4_BIT | TRACK_IR_H3_BIT);
uint8_t right_mask = line_mask & (TRACK_IR_H2_BIT | TRACK_IR_H1_BIT);
if ((left_mask != 0U) && (right_mask == 0U)) {
return TRACK_IR_STATE_LEFT;
}
@@ -72,7 +78,8 @@ track_ir_state_t track_ir_basic_judge(void)
return TRACK_IR_STATE_RIGHT;
}
return TRACK_IR_STATE_CENTER;
/* 左右都有信号,视为十字或居中压线 */
return TRACK_IR_STATE_CROSS;
}
const char *track_ir_state_to_string(track_ir_state_t state)