【问题标题】:Detect when 2 buttons are being pushed simultaneously without reacting to when the first button is pushed检测何时同时按下 2 个按钮而不对按下第一个按钮时做出反应
【发布时间】:2021-10-22 11:51:42
【问题描述】:

我正在编写机器人的控制器逻辑。控制器上有 2 个按钮。有 3 种不同的动作与 2 个按钮相关联,当仅按下第一个按钮时发生一个,仅按下第二个按钮时发生第二个,同时按下两个按钮时发生第三个。

通常,当用户想要同时按下两个按钮时,他们会一个接一个地按下。这会导致执行不正确的操作。

这是部分代码。

while (true)
{
    conveyor_mtr.setVelocity(22, pct);

    if (Controller1.ButtonL2.pressing() && Controller1.ButtonL1.pressing())
    {
      conveyor_mtr.spin(fwd); // action 1
    }
    else if (Controller1.ButtonL2.pressing())
    {
      backGoalLift.setAngle(3); // action 2
    }
    
    else if (Controller1.ButtonL1.pressing())
    {
      backGoalLift.setAngle(55); // action 3
    }
    else
    {
      conveyor_mtr.stop(hold);
    }
    task::sleep(20); //ms
}

【问题讨论】:

  • 您要查找的术语是“去抖动”
  • 您需要延迟单个按钮按下事件以允许正确评估所需命令。因为你有一个 sleep (我不推荐,最好安排任务执行)你可以用一个计数器来等待几百毫秒

标签: c++ robotics


【解决方案1】:

您可以使用短计时器,每次触发按钮按下时都会重新启动该计时器。每次计时器到期时,您都会检查所有当前按下的按钮。当然,您需要选择一个合适的计时器持续时间,以便可以“同时”按下两个按钮,同时让您的应用程序感觉反应灵敏。

您可以在循环中使用计数器来实现一个简单的计时器。但是,在某些时候,您会更喜欢基于事件的架构。

【讨论】:

    猜你喜欢
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多