RobotC Mindstorms EV3 如何获取乐高EV3积木按键输入?
ROBOTC for LEGO Mindstorms 4.X 获取EV3按键输入实现方法
基础按键状态读取
ROBOTC 4.X针对EV3主控的6个实体按键内置了专用布尔变量,直接读取即可获取实时状态,变量值为true时代表对应按键处于按下状态:
buttonLeft:左侧方向键buttonRight:右侧方向键buttonUp:上方方向键buttonDown:下方方向键buttonEnter:中间确认键buttonBack:返回/退出键
单按键检测示例
task main() { // 循环轮询按键状态 while(true) { if(buttonEnter) { displayCenteredTextLine(3, "Enter Pressed"); break; // 按下确认键退出程序 } if(buttonLeft) { motor[motorB] = 30; // 按下左键启动B电机 } else { motor[motorB] = 0; } sleep(20); // 降低轮询资源占用 } }
基于BUTTONTYPE的统一检测
如果需要批量管理按键触发逻辑,可以使用getButtonPress()函数搭配BUTTONTYPE枚举类型实现,枚举值对应关系如下:
buttonTypeLeft:左方向键buttonTypeRight:右方向键buttonTypeUp:上方向键buttonTypeDown:下方向键buttonTypeEnter:确认键buttonTypeBack:返回键buttonTypeNone:无按键按下
批量检测示例
task main() { while(true) { // 传入枚举值检测指定按键 if(getButtonPress(buttonTypeUp)) { motor[motorA] = 50; } else if(getButtonPress(buttonTypeDown)) { motor[motorA] = -50; } else { motor[motorA] = 0; } // 无参调用可直接获取当前按下的按键 BUTTONTYPE pressedBtn = getButtonPress(); if(pressedBtn != buttonTypeNone) { displayCenteredTextLine(2, "Btn ID: %d", pressedBtn); } sleep(20); } }
注意事项
- 按键状态默认是电平触发,按住时会持续返回按下状态,如需实现仅按下瞬间响应一次的边沿触发,可自行记录上一帧的按键状态做对比判断
- 轮询间隔建议设置在10~50ms区间,既不会丢失按键触发事件,也不会额外占用主控运算资源
内容的提问来源于stack exchange,提问作者Lucas
相关产品推荐
相关产品推荐

