#c #robotics
Вопрос:
Я программирую логику контроллера робота. На контроллере есть 2 кнопки. Существует 3 различных действия, связанных с 2 кнопками, одно происходит, когда нажимается только первая кнопка, второе, когда нажимается только вторая, и третье, когда нажимаются обе кнопки.
Обычно, когда пользователь хочет нажать обе кнопки, они нажимают одну за другой. Это приводит к выполнению неправильного действия.
Вот часть кода.
while (true)
{
conveyor_mtr.setVelocity(22, pct);
if (Controller1.ButtonL2.pressing() amp;amp; 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
}
Комментарии:
1. Термин, который вы ищете, — это «разоблачение».
2. Вам необходимо отложить событие нажатия одной кнопки, чтобы обеспечить правильную оценку нужной команды. Поскольку у вас есть сон (что я не рекомендую, лучше запланируйте выполнение задачи), вы можете сделать это с помощью счетчика, чтобы подождать несколько сотен миллисекунд
Ответ №1:
Вы можете использовать короткий таймер, который перезапускается каждый раз при нажатии кнопки. Каждый раз, когда истекает время таймера, вы проверяете все нажатые в данный момент кнопки. Конечно, вам нужно будет выбрать хорошую продолжительность таймера, чтобы можно было нажимать две кнопки «одновременно», сохраняя при этом отзывчивость вашего приложения.
Вы можете реализовать простой таймер, используя счетчик в своем цикле. Однако в какой-то момент вы будете более довольны архитектурой, основанной на событиях.