你的病情 while 循环是 ReadBumpSensors() == 0 ,所以块与之相关 if 语句不会被执行而不是返回值 ReadBumpSensors() 评估条件之间的变化 while 和 if 。
while
ReadBumpSensors() == 0
if
ReadBumpSensors()
也许你想做这样的事情:
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; } }
我不确定是什么 ReadBumpSensors() 函数在内部执行,但是只有当它返回0时你才会进入这个循环。当发生这种情况时,你总是会直接进行一些,然后如果接下来的三次调用就可以做其他事情。 ReadBumpSensors() 将返回1,2或3。
您可以尝试将if-structure从三个不同的if更改为if-elseif-elseif -structure,如果这些操作中只有一个应该在一个循环中发生。