带有超声波传感器的arduino汽车

时间:2018-11-18 22:53:14

标签: c++ arduino

我的代码有问题。我正确连接了所有电缆,但是传感器读取的值都不正确。否则我写的代码是错误的。当物体在前传感器的20cm之内时,汽车永远不会停止。而是继续行驶。 RC汽车通过3个超声波传感器与arduino相连。 RC电机由H桥(不是屏蔽)驱动。注释的代码部分是RC汽车是否具有伺服的代码。但是这辆车有2个RC马达。 这是代码:

2016-01-01;369416.0
2016-01-02;4825.0
2016-01-03;0.0

2 个答案:

答案 0 :(得分:1)

在评论中,您说Fwd变量永不改变。请注意,尽管您似乎打算拥有一个全局变量,但您有三个不同的变量名称Fwd

第一个在setup中:

void setup() {
  Serial.begin(9600);
  int Fwd = false;
  // ...
}

Fwd是本地设置的。它已设置但从未读取。 setup完成后,就不再存在。

另外两个在这里:

if (distanceF > 50 ) {
  int Fwd = true;
  Serial.print("true");
} else {
  int Fwd = false;
  Serial.print("false");
  Stp();
}

每个变量都是一个新变量,该变量在定义它的作用域内是局部的(从定义到右花括号)。同样,这些已设置但从未检查过。

我认为您打算在任何函数之外声明一个全局变量:

int Fwd = false;

然后,每当您要更改它时,只需为其分配即可,而无需重复输入类型:

Fwd = true;

然后您将得到以下内容:

if ((distanceF = true) && (distanceL > distanceR))

我不确定(distanceF = true)的意图,但是我不认为代码可以实现您的期望。由于您只使用了一个=,所以这是一项分配,而不是一个比较。因此,您的if条件实际上是将distanceF的值更改为true,而不是检查它是否为真(或非零)。我怀疑您想在那里Fwd

if (Fwd && (distanceL > distanceR))

没有一个可以解释为什么汽车实际上并没有停止。我怀疑您从超声波传感器读取数据时也遇到问题。也许单位不是代码中表达的单位,或者您需要对读数进行一些平均(或其他滤波)以减少噪声和错误的读数。

答案 1 :(得分:0)

这里是代码,您只需要自己调整代码即可,但是逻辑可行,如果前面有东西,至少汽车会停下来。还请注意如何编写代码。如果声明不是==,而是= 还要给变量和函数起适当的名字。

if (distanceF < 50)
{
    // Code that will stop the car
}
else
{
    // Code that will drive car forward
}

if (Fwd)
{
    if (distanceL > distanceR)
    {
        // Code that will drive car left
    }
    else
    {
        // Code that will drive car right
    }
}