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