使用Arduino Uno控制机器人小车

Using Arduino Uno to control robot car

我建造了一辆带有超声波传感器的小型机器人汽车。 (我遵循了本教程: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 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();

  }
}

这应该可以帮助您更清楚地看到您的逻辑。