我有一个数组:
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]);
没有任何成功。
编辑:
Serial.print(foo[2]); //Prints -9.2
foo[2] = -9.2; // I manually set foo[2] to -9.2
xAngle = foo[2];
xPID.Compute(); //Computes perfectly.
我必须添加 foo 在自定义库中。这太奇怪了。有人对此有所了解吗?