我造了一辆装有超声波传感器的小型机器人车。(我遵循了本教程:http://educ8s.tv/arduino-robot-easy-diy-project/ ),完整的源代码就在下面(您必须下载)
我修改了代码,因为我希望机器人在前面有一个物体时停止,但是如果物体迅速移动,机器人就会继续前进。
下面是我在空循环中的尝试:
void loop() {
int distanceR = 0;
int distanceL = 0;
delay(40);
distance = readPing();
if (distance >= 15){
while(distance>= 15){
moveForward();
distance = readPing();
}
}
if(distance<=15)
{
moveStop();
delay(100);
moveBackward();
delay(300);
moveStop();
delay(200);
distance = readPing();
distanceR = lookRight();
delay(200);
distanceL = lookLeft();
delay(200);
distance = readPing();
if (distance >= 15){
while(distance >= 15){
moveForward();
distance = readPing();
}
}
if(distanceR>=distanceL)
{
turnRight();
}else
{
turnLeft();
}
}else
{
moveForward();
}
distance = readPing();``
}这段代码最初是用来阻止机器人的,然后它继续前进,但是当你第二次把手放在它前面并保持它在那里的时候,它就会转动,然后突然停止。(我正在尝试测试一个对象第一次快速移动,第二次停留在那里。)
在我看来,在机器人第一次停下来之后,代码就停止了循环,运行了空循环的其余部分,但是后来停止了,因为在开始的时候,我让机器人测试它前面任何物体的距离,但是它仍然没有移动。
任何帮助都将不胜感激。
发布于 2018-07-01 05:19:42
你有一些死代码和几个冗余。以下是当这种情况被消除时的样子:
void loop() {
int distance;
int distanceR = 0;
int distanceL = 0;
delay(40);
distance = readPing();
while(distance>= 15){
moveForward();
distance = readPing();
}
moveStop();
delay(100);
moveBackward();
delay(300);
moveStop();
delay(200);
distanceR = lookRight();
delay(200);
distanceL = lookLeft();
delay(200);
if(distanceR>=distanceL)
{
turnRight();
}else
{
turnLeft();
}
}这将帮助你更清楚地理解你的逻辑。
https://stackoverflow.com/questions/51120460
复制相似问题