Array mit for-Schleife füllen

Hallo,
ich habe jetzt dieses (es funktioniert prima):`

LED leds[] = {
  LED(&pwmDriver0, 0), LED(&pwmDriver0, 1), LED(&pwmDriver0, 2),
  LED(&pwmDriver0, 3), LED(&pwmDriver0, 4), LED(&pwmDriver0, 5),
  LED(&pwmDriver0, 6), LED(&pwmDriver0, 7), LED(&pwmDriver0, 8),
  LED(&pwmDriver0, 9), LED(&pwmDriver0, 10), LED(&pwmDriver0, 11),
  LED(&pwmDriver0, 12),LED(&pwmDriver0, 13),
};

Da ich jetzt aber weiterschreiben müsste bis ca. 64, möchte ich dieses Array mit einer Schleife füllen. Wie unten habe ich es versucht.

LED leds[] = {
  for (uint8_t p=0;p<=13;p++){LED(&pwmDriver0, p),}
};

Klappt aber nicht.
Fehlermeldung: "Compilation error: expected primary-expression before 'for'
Ich bin sehr neu bei der Arduino Programmierung.
Kann mir da jemand helfen?

Gruß, Georg

Das Problem ist, dass du keine for-Schleife in der Initialisierung des Arrays verwenden darfst. Stattdessen musst du erst ein Array mit einer bestimmten Größe, in diesem Fall 14, erstellen und dann im setup-Teil deines Codes dieses Array füllen:

LED leds[14];

void setup() {
  for(int i = 0; i < sizeof(leds) / sizeof(leds[0]); i++) {
    leds[i] = LED(&pwmDriver0, i);
}

sizeof(leds) / sizeof(leds[0]) berechnet dabei die Länge des Arrays, du kannst aber auch gleich 14 einsetzen.

1 Like

evtl. etwas einfacher:

LED leds[14];

void setup() {
 int i = 0;
 for(auto led:leds) led = LED(&pwmDriver0, i++);
}
1 Like

Mit einer foreach-Schleife gehts natürlich auch, ich wollte nur so nah wie möglich am Original bleiben

Hallo guter123,

im Prinzip verstehe ich was Du schreibst.
Klappt aber leider nicht. Jetzt sieht es so aus:

// Anzahl der LEDs
const uint8_t LEDS = 14;

Adafruit_PWMServoDriver pwmDriver0 = Adafruit_PWMServoDriver(0x40);
// Adafruit_PWMServoDriver pwmDriver2 = Adafruit_PWMServoDriver(0x41);

LED leds[14];

void setup() {
 int i = 0;
 for(auto led:leds) led = LED(&pwmDriver0, i++);

Ich habe natürlich beide Versionen versucht. Beide Male die gleiche Fehlermeldung: "Compilation error: no matching function for call to 'LED::LED()'"

Die Salami Taktik lässt grüßen.

Tja dein LED hat keinen Konstruktor ohne Parameter.
Was ist LED überhaupt?

evtl. mit einem vollständingen Sketch - inkl. Links zu allen verwendeten Libraries sodass man eindeutig jene findet die du auch verwendest.

Aber ich möchte doch nur das Array anstatt von Hand mit einer Schleife füllen, sonst nichts.
Aber es lohnt sich nicht, da soviel Zeit zu investieren. Wenn das so schwierig ist, dann bleibt es besser so, wie es ist. Es läuft ja.

Gruß, Georg

Kannste ja machen....
Nur helfen kann man/ich dir so nicht.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.