我建造了一辆小型机器人车,上面装有超声波传感器。 (我遵循了本教程:http://educ8s.tv/arduino-robot-easy-diy-project/),完整的源代码在其下面(您必须下载)
我修改了代码,因为我希望机器人在其前面放置一个物体时停止运行,但是如果物体快速移开,机器人将继续前进。
这是我在void循环内的尝试:
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();``
}
此代码起初是用来使机器人停止运行,然后继续运行,但是第二次将手放在其前面并保持在该位置时,它会旋转但随后突然停止。 (我正在尝试测试物体是否第一次快速移开,而第二次停留在该位置。)
对我来说,代码似乎在我第一次使机器人停止并运行其余的void循环后停止循环,但随后又停止了,因为在开始时我让机器人测试了目标前面的所有对象的距离它,但它仍然不会移动。
任何帮助将不胜感激。
答案 0 :(得分:0)
您有一些无效的代码和几个冗余。这是消除后的样子:
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();
}
}
这应该有助于您更清楚地了解自己的逻辑。