OK, das mit der Definition als Konstante geht klar.
Mein
const byte ANZSERVOS = 3:
Servo myservo[ANZSERVOS];
kompiliert auch. Es hakt aber nun bei anderen Objekten, bei deren Erstellung Parameter übergeben werden müssen.
Da komme ich nicht weiter, hier konkret bei der PID Lib, die laut PID_v1.h folgende Parametern erwartet:
PID::PID(double*, double*, double*, double, double, double, int) .
Folgendes kompiliert nicht:
#include <PID_v1.h> // Standard PID-Lib aus dem Playground
const byte PIDs = 2; // 2 PID Regelungen
//--------- PID -----------
double PID_Input[PIDs], double PID_Output[PIDs], double PID_Setpoint[PIDs];
PID myPID[2](&PID_Input[2], &PID_Output[2], &PID_Setpoint[2], 100, 50, 0, DIRECT);
Fehlermeldung: // Obkekt_indizier_TEST:30: error: bad array initializer
Auch folgende Versionen gehen NICHT (Compiler-Fehlermeldungen als Kommentar hintenangestellt
2. Versuch: PID myPID[PIDs]; Fehlermeldung : Obkekt_indizier_TEST:29: error: no matching function for call to 'PID::PID()'
note: candidates are: PID::PID(double*, double*, double*, double, double, double, int)
3. Versuch: PID myPID[2](&PID_Input[], &PID_Output[], &PID_Setpoint[], 100, 50, 0, DIRECT); // Obkekt_indizier_TEST:31: error: expected primary-expression before ']' token Obkekt_indizier_TEST:31: error: bad array initializer
4. Versuch: PID myPID[2](&PID_Input, &PID_Output, &PID_Setpoint, 100, 50, 0, DIRECT); // Obkekt_indizier_TEST:32: error: bad array initializer
Meine Originalversion ohne Indices, weder bei den Objekten noch bei den Übergabeparametern macht mit PID myPID_QR(&PID_QR_Input, &PID_QR_Output, &PID_QR_Setpoint, P_Param_QR, I_Param_QR, D_Param_QR, DIRECT);
keine Probleme.
Ich habe dann versucht, die PID myPID[index] innerhalb einer for-Schleife zu erstellen, aber vor der Setupfunktion mag C das nicht, und innerhalb von Setup() streikt der Compiler, da myPID noch nicht initialisiert ist (was ja auch stimmt).
Wie können also indexierte Objekte aus einer Library erstellt werden, bei der ebenfalls indexierte Parameter übergeben werden sollen ? Ich will ja pro Objekt entsprechend unterschiedliche Parameter setzen können-
Damit zusammenhängende Folgefrage, bezieht sich auf die Funktion "machWasMit" aus dem Beispiel von michael_x (reply #4):
Ist es zwingend, daß dort das Servoobjekt über eine Referenz aufgerufen wird, also s.writeMicroseconds(1200); ?
Würde also der direkte Weg, z.B. die Wertezuordnung mit myservo[1].writeMicroseconds(1200);
gar nicht gehen ?
Danke ,
Tütenflieger
(Arduino-IDE 1.06 unter Win 8.1)