我正在尝试一个项目来编程iRobot.对于这个项目,我有一个部分,我需要这个机器人直行,除非按下碰撞传感器.当按下不同的碰撞传感器时,应该发生不同的事情,然后它应该继续直线移动.这是我到目前为止的代码:
while( ReadBumpSensors() == 0) { drive(200, RAD_STRAIGHT); if ( ReadBumpSensors() == 1 ) { drive(-200, RAD_STRAIGHT); delayMs(1000); drive(200, 1); delayMs(500); drive(200, RAD_STRAIGHT); } if ( ReadBumpSensors() == 2) { drive(-200, RAD_STRAIGHT); delayMs(1000); drive(200,-1); delayMs(500); drive(200, RAD_STRAIGHT); } if ( ReadBumpSensors() == 3) { drive(-200, RAD_STRAIGHT); delayMs(1000); drive(200,-1); delayMs(500); drive(200, RAD_STRAIGHT); } }
我没有得到任何错误,但机器人只是直接移动而没有响应任何if语句.我觉得这是某种类型的语法错误,但我不确定.有什么建议?
你的while
循环条件是ReadBumpSensors() == 0
,所以与if
语句相关的块将不会被执行,而不是在ReadBumpSensors()
为while
和的条件评估之间的变化的返回值if
.
也许你想做这样的事情:
for(;;) /* infinite loop */ { switch (ReadBumpSensors()) { case 0: drive(200, RAD_STRAIGHT); break; case 1: drive(-200, RAD_STRAIGHT); delayMs(1000); drive(200, 1); delayMs(500); drive(200, RAD_STRAIGHT); break; case 2: drive(-200, RAD_STRAIGHT); delayMs(1000); drive(200,-1); delayMs(500); drive(200, RAD_STRAIGHT); break; case 3: drive(-200, RAD_STRAIGHT); delayMs(1000); drive(200,-1); delayMs(500); drive(200, RAD_STRAIGHT); break; } }
更新:案例2和3的程序相同,因此您可以像这样合并它们.
for(;;) /* infinite loop */ { switch (ReadBumpSensors()) { case 0: drive(200, RAD_STRAIGHT); break; case 1: drive(-200, RAD_STRAIGHT); delayMs(1000); drive(200, 1); delayMs(500); drive(200, RAD_STRAIGHT); break; case 2: case 3: drive(-200, RAD_STRAIGHT); delayMs(1000); drive(200,-1); delayMs(500); drive(200, RAD_STRAIGHT); break; } }