下面的代碼有三個double *類型的參數。該代碼是Arduino PID庫的一部分,用戶通常會讀取模擬端口或某種傳感器作爲「輸入」項的參數,某些固定值或用戶控制的變量作爲「設定值「一詞。但是參數是double *類型的。當他提供雙倍數據時用戶不應該得到錯誤嗎?這個構造函數代碼如何將指針作爲參數?
PID::PID(double* Input, double* Output, double* Setpoint,
double Kp, double Ki, double Kd, int ControllerDirection)
{
myOutput = Output;
myInput = Input;
mySetpoint = Setpoint;
inAuto = false;
PID::SetOutputLimits(0, 255); // default output limit corresponds to
// the arduino pwm limits
SampleTime = 100; // default Controller Sample Time is 0.1 seconds
PID::SetControllerDirection(ControllerDirection);
PID::SetTunings(Kp, Ki, Kd);
lastTime = millis()-SampleTime;
}
是否構造只取用戶提供了雙重的地址?
如果用戶正在讀取一些溫度數據,比如double temp = AnalogRead(1)。因此,讀取來自模擬引腳1的任何信息,myOutput是否只是這些傳入溫度讀數的地址?
myInput,myOutput和mySetpoint在另一個成員函數中被取消引用。
double input = *myInput;
double error = *mySetpoint - input;
請發表[MCVE ]。你的問題目前包含甚至不使用你正在談論的ctor。 –
*你*如何使用課堂?你實際提供給構造函數的是什麼參數?如果你提供了一個'double' *值*(而不是一個指向'double'的指針),那麼會出現錯誤。 –
_「構造函數是否只接受用戶提供的double的地址?」_是的。恐怕我不明白你的問題? –