使用Arduino Uno控制机器人汽车

时间:2018-07-01 04:41:51

标签: arduino arduino-uno arduino-ide

我建造了一辆小型机器人车,上面装有超声波传感器。 (我遵循了本教程: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循环后停止循环,但随后又停止了,因为在开始时我让机器人测试了目标前面的所有对象的距离它,但它仍然不会移动。

任何帮助将不胜感激。

1 个答案:

答案 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();

  }
}

这应该有助于您更清楚地了解自己的逻辑。