首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Arduino Uno控制机器人车

用Arduino Uno控制机器人车
EN

Stack Overflow用户
提问于 2018-07-01 04:41:50
回答 1查看 585关注 0票数 0

我造了一辆装有超声波传感器的小型机器人车。(我遵循了本教程:http://educ8s.tv/arduino-robot-easy-diy-project/ ),完整的源代码就在下面(您必须下载)

我修改了代码,因为我希望机器人在前面有一个物体时停止,但是如果物体迅速移动,机器人就会继续前进。

下面是我在空循环中的尝试:

代码语言:javascript
复制
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();``
}

这段代码最初是用来阻止机器人的,然后它继续前进,但是当你第二次把手放在它前面并保持它在那里的时候,它就会转动,然后突然停止。(我正在尝试测试一个对象第一次快速移动,第二次停留在那里。)

在我看来,在机器人第一次停下来之后,代码就停止了循环,运行了空循环的其余部分,但是后来停止了,因为在开始的时候,我让机器人测试它前面任何物体的距离,但是它仍然没有移动。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-01 05:19:42

你有一些死代码和几个冗余。以下是当这种情况被消除时的样子:

代码语言:javascript
复制
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();

  }
}

这将帮助你更清楚地理解你的逻辑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51120460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档