Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 编译器从float转换为double时的奇怪行为_Arduino - Fatal编程技术网

Arduino 编译器从float转换为double时的奇怪行为

Arduino 编译器从float转换为double时的奇怪行为,arduino,Arduino,我有一个数组: float foo[3]; 在ino文件中,我必须将其中一个作为输入发送到PID double output; PID myPID(&input, &output, &target, 1, 0.0, 1.1, DIRECT); ... void loop(){ input =foo[2]; myPID.Compute(); Serial.print(output); //output: "nan" ... } PID如下所示: PID

我有一个数组:

float foo[3];
在ino文件中,我必须将其中一个作为输入发送到PID

double output;
PID myPID(&input, &output, &target, 1, 0.0, 1.1, DIRECT);
...
void loop(){
  input =foo[2];   
  myPID.Compute();
  Serial.print(output); //output: "nan"
...
}
PID如下所示:

PID::PID(double* Input, double* Output, double* Setpoint,
        double Kp, double Ki, double Kd, int ControllerDirection)
它进行编译,但PID outvalue的输出为nan

但是,如果我将输入设置为-1.2,那么它就会工作

void loop(){
      input =foo[2];  
      input = -1.2;
      myPID.Compute();
      Serial.print(output); //output: "1200"
    ...
    }
我怎样才能解决这个问题?编译器应自动将浮点值转换为两倍。如Mega 2560。 我也尝试过:
input=double(foo[2])没有任何成功


编辑:

我必须补充一点,foo位于自定义库中。这太奇怪了。有人对此有线索吗?

  • 首先,所有AVR双打都是浮点数作为或。这使得双打与Arduino Mega 2560上的浮动相同。您可以通过比较
    sizeof(double)来验证这一点
    sizeof(浮动)两者都将返回
    4
  • 其次,如果您想将一种类型强制转换为另一种类型,语法是
    (targetType)sourceType
    ,因此如果您执行这种操作,您的赋值应该如下所示

    input =(double)foo[2];
    

但是,在这种情况下,这是不相关的,因为double和float是相同的


我认为最有可能的问题是,PID控制器不喜欢给定参数设置的
foo[2]
中的任何值。在分配
input=foo[2]之前,您是否尝试过
foo[2]=-1.2

多一点代码会有所帮助。foo[2]是否已初始化?我不确定它是零,就像它是C或C++一样。如果一开始是一个NAN,并用它进行计算,结果应该是一个NAN。您使用的是哪个PID库?Arduino PID库-Brett Beauregard的1.0.1版您是对的。设置foo[2]=val可以正常工作。val是来自foo[2]的相同浮点。这对我来说毫无意义。我更新了问题,请看你是否有时间。我通过将foo重新创建为double来修复它。这不应该发生。如果您没有
foo[2]=-9.2然后
PID.Compute()
失败?你的
float foo[3]在哪里准确声明?
input =(double)foo[2];
    input =(double)(foo[2]);