From 8eaac5b877cc668bc23ac0a8cc0f17f41f009c0d Mon Sep 17 00:00:00 2001 From: cxh Date: Thu, 19 Jun 2025 14:55:46 +0800 Subject: [PATCH] Auto commit at 2025-06-19 14:55:46 --- src/mc/src/timer_tasks.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/mc/src/timer_tasks.cpp b/src/mc/src/timer_tasks.cpp index b00aa85..70f717d 100644 --- a/src/mc/src/timer_tasks.cpp +++ b/src/mc/src/timer_tasks.cpp @@ -71,6 +71,8 @@ void epsTimerTask(CANDriver &canctl) // 定时器回调:VCU 灯控、扫地、除尘等功能 void vcuTimerTask(CANDriver &canctl, DumperController &dumper) { + static bool last_sweep_ctrl = false; // 上一次扫地状态(用于比较是否发生变化) + auto msg = get_safe_control(); vcu1_cmd.setLeftLight(msg.left_light); @@ -85,11 +87,16 @@ void vcuTimerTask(CANDriver &canctl, DumperController &dumper) vcu2_cmd.setSpray(msg.spray); vcu2_cmd.setSweeepCtrl(msg.sweep_ctrl); - // 只有在扫地中并且斗处于收斗状态时才发VCU指令 - if (msg.sweep_ctrl && dumper.getSimpleState() == 0) + bool sweep_changed = (msg.sweep_ctrl != last_sweep_ctrl); + bool can_start_sweep = (msg.sweep_ctrl && dumper.getSimpleState() == 0); + + if (sweep_changed || can_start_sweep) { + // 状态变更(开或关) 或者 满足开始扫地条件,发出指令 canctl.sendFrame(vcu1_cmd.toFrame()); canctl.sendFrame(vcu2_cmd.toFrame()); + + last_sweep_ctrl = msg.sweep_ctrl; // 更新上一次状态 } }