【发布时间】:2017-05-30 15:57:17
【问题描述】:
下面的代码有三个 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;
【问题讨论】:
-
请发帖minimal reproducible example。您的问题当前包含的内容甚至没有使用您正在谈论的 ctor。
-
你如何使用这个课程?您实际上向构造函数提供了哪些参数?如果您提供
double值(而不是指向double的指针),那么是的,将会出错。 -
"构造函数是否只取用户提供的双精度地址?" 是的。恐怕我不明白你的问题?
-
yes - 如果用户将双精度值传递给需要指向双精度值的指针的函数,用户将收到错误消息。不,'地址'没有完成。显示一些您预计会失败但正在运行的代码
-
完全符合预期。操作符的地址就是你获取指针的方式。
标签: c++ class pointers arduino dereference