Abs函数未提供所需的值

时间:2018-06-06 11:51:05

标签: arduino arduino-ide

我一直在尝试使用abs函数将此代码与另一个浮点值匹配。这是代码:

float li=0;
float d=2;
void setup() {

Serial.begin(9600);

}

void loop() {
   li=li+0.1125;
   Serial.println(li);
   if(abs(li-d)<0.2)
    {
      Serial.println('h');
      exit(0);
    }

}

我希望li值最接近d值。值之间的差异应小于0.2。如果为true,那么if语句应该执行。但是,这是我得到的输出:

0.11
0.22
0.34
0.45
0.56
0.68
0.79

if语句在0.79之后退出。帮助!!!我是Arduino的新手。

1 个答案:

答案 0 :(得分:0)

Arduino Serial对象使用中断通过UART发送数据。

这有助于节省在&#39; println&#39;功能尽可能低。

基本上,Serial对象不会发送所有发送到&#39; println&#39;在将控制权返回到“循环”之前的功能&#39;功能。 因此,当您运行代码时,串行传输缓冲区就会填满。

因此,当您的代码实际进入if条件时,串行缓冲区中的某些数据尚未到达您的串行监视器。

&#39;退出&#39;函数暂停Arduino的所有活动。因此,如果Serial对象的发送缓冲区中有任何数据,则不会发送它。

在你的代码中,abs函数正在正常工作。只是串口对象缓冲区上的一些数字没有被传输,你觉得有些不对劲。在调用&#39;退出&#39;之前,您需要清空Serial对象传输缓冲区。用于查看所需结果的功能。

对if条件进行以下更改,并且在应用程序运行exit函数之前,您将正确打印所有数据。

if(abs(li-d)<0.2)
{
  Serial.println('h');
  Serial.flush();
  exit(0);
}

我希望这会有所帮助。