我有一个函数,它将参数设置为double并对其进行减法运算。但是当某个参数之一因为某种原因而为0时,我得到0的结果。
int calcPID(double current, double desired, double k){
double diff;
diff = desired - current;
Serial.print("desired = ");
Serial.print(desired);
Serial.print(" ,current = ");
Serial.print(current);
Serial.print(",diff = ");
Serial.println(diff);
int r = (int)diff;
return r;
}
输出
desired = 250.00 ,current = 1.69,diff = 248.31
desired = 250.00 ,current = 0.00,diff = 0.00
当电流为0.00时,结果(差异)也是0.00,当它应该是250时。有人可以告诉我发生了什么吗?
编辑:
发现我得到的垃圾值当前某种程度上并不是一个双倍(如果条件是当前> 1并且当前< = 1并且它们都不是真的我写了2)。
答案 0 :(得分:1)
这确实很奇怪。
我建议创建一个像这样的第二个最小函数:
int calcPID2(double current, double desired){
Serial.println(desired - current);
return(1);
}
然后逐渐将其更改为原始版本,并查看其出错的位置(如果出错了..)。
过去我的Arduino软件也有一些奇怪的东西。也许你应该检查一下你是否有最新的版本。
您可能还想检查是否没有内存或堆栈问题(即如果剩余的可用内存不足)。
答案 1 :(得分:0)
我认为这与浮点计算有关。看看这个:https://www.arduino.cc/en/Reference/Float或google它,你会找到相当不错的答案:)