Der folgende Code hat drei Argumente vom Typ double *. Der Code ist Teil einer Arduino-PID-Bibliothek, und der Benutzer würde typischerweise einen analogen Port oder eine Art Sensor als Argument für den Begriff "Eingabe" und einige feste Werte oder vom Benutzer gesteuerte Variablen als den Wert des "Sollwerts" eingeben "Begriff. Aber das Argument ist vom Typ double *. Sollte der Benutzer keinen Fehler bekommen, wenn er ein Double liefert?Wie nimmt dieser Konstruktor Code Zeiger als Argumente?
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;
}
Hat der Konstruktor nehmen Sie nur die Adresse des Doppel, dass der Benutzer zur Verfügung stellt?
Wenn der Benutzer einige Temperaturdaten gelesen hat, sagen Sie zweimal temp = AnalogRead (1). Also, was liest alles, was vom analogen Pin 1 kommt, würde myOutput nur die Adresse dieser eingehenden Temperaturmesswerte sein?
myInput, myOutput und mySetpoint werden in einer anderen Elementfunktion de-referenziert.
double input = *myInput;
double error = *mySetpoint - input;
Bitte senden Sie uns eine einen Zeiger anstelle der Semantik von-Wert verwenden [MCVE ].Was deine Frage momentan enthält, benutzt nicht einmal den Kern, von dem du sprichst. –
Wie * benutzen * Sie die Klasse? Welche Argumente liefern Sie dem Konstruktor? Wenn Sie einen 'double' * Wert * (und nicht einen Zeiger auf ein' double') angeben, dann wird ein Fehler angezeigt. –
_ "Nimmt der Konstruktor nur die Adresse des Double, die der Benutzer bereitstellt?" _ Ja. Ich fürchte, ich bekomme deine Frage nicht? –