FAST LED Array von 2 unterschiedlich langen LED Stripes

Hey Leute,

folgende Situation. Mein Code lief soweit mit allen Effekten aus zwei Streifen, die ich an zwei verschiedene Pins habe. Da ich aber jedoch jeden Effekt und jede Animation zweimal im Quellcode habe für je einen Streifen, habe ich mir gedacht, ich passe das mit Hilfe eines Arrays an und muss nur noch über den Funktionsaufruf den jeweiligen Streifen ansprechen.

Aber nun leuchtet nichts, die LEDs bleiben schwarz. Was habe ich falsch gemacht?

Hier erstmal die Definitionen
Ps. Da ich nicht wusste, wie ich die NUM_LEDS als Array anlegen und nutzen kann, da ich jedesmal, wenn ich es als Array hatte, bei CRGB leds ne Fehlermedlung kam (Etwas sei kein int, obwohl es das war "const int nummerleds = {117,30}; )habe ich direkt die anzahl in das setup reingeschrieben.

Vorher

#include "FastLED.h"

#define DATA_PIN    6
#define DATA_PIN2   3

#define LED_TYPE    WS2812B
#define COLOR_ORDER GRB
#define NUM_LEDS    117
#define NUM_LEDS2   30

CRGB leds[NUM_LEDS];
CRGB leds2[NUM_LEDS2];

#define BRIGHTNESS          96
#define FRAMES_PER_SECOND  120

void setup() {
  delay(3000); // 3 second delay for recovery

  // tell FastLED about the LED strip configuration
  FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
  FastLED.addLeds<LED_TYPE, DATA_PIN2, COLOR_ORDER>(leds2, NUM_LEDS2).setCorrection(TypicalLEDStrip);
}

Nachher:

#include "FastLED.h"

// define all the things

#define DATA_PIN    6
#define DATA_PIN2   3

#define LED_TYPE    WS2812B
#define COLOR_ORDER GRB
#define NUM_LEDS   117
#define NUM_LEDS2   30
#define LED_STRIPE 1
CRGB leds[LED_STRIPE][NUM_LEDS];


#define BRIGHTNESS          255
#define FRAMES_PER_SECOND  120

void setup() {
  delay(3000); // 3 second delay 
  FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds[0], 117).setCorrection(TypicalLEDStrip);
  FastLED.addLeds<LED_TYPE, DATA_PIN2, COLOR_ORDER>(leds[1], 30).setCorrection(TypicalLEDStrip);
  FastLED.setBrightness(BRIGHTNESS);
  Serial.begin(115200);
}

Also nun bleiben die LEDs leer. Aufgerufen werden sie durch zB.

void pulseM(int s)
{
  black();
  uint8_t BeatsPerMinute = 10;
  uint8_t beat = beatsin8( BeatsPerMinute, 64, 255);
  uint8_t helligkeit = beat;
  for ( int i = 0; i < NUM_LEDS2; i++) { //9948
    leds[s][i] = CHSV(gHue, 255, helligkeit);
  }
}

Da sollte doch irgendetwas leuchten, auch wenn die NUM_LEDS ne andere Anzahl haben, dennoch müsste da etwas leuchten.

Danke schonmal für eure Hilfe

WO ist leds[0] bzw leds[1] in Deinem Sketch definiert?

uwefed:
WO ist leds[0] bzw leds[1] in Deinem Sketch definiert?

Ich bin davon ausgegangen, dass das die Definition hier dafür ist.

CRGB leds[LED_STRIPE][NUM_LEDS];

Ist das etwa nicht der Fall, und soll ich dann für beide Fälle was eigenes definieren?
Sprich

CRGB leds[0][NUM_LEDS];
CRGB leds[1][NUM_LEDS2];

Edit: Außerdem habe ich ja auch im Setup folgende Zeilen:

FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds[0], 117).setCorrection(TypicalLEDStrip);
  FastLED.addLeds<LED_TYPE, DATA_PIN2, COLOR_ORDER>(leds[1], 30).setCorrection(TypicalLEDStrip);

Da sollte er doch dem CRGB Leds Array alles sagen können. Oder nicht?

Habe jetzt einige weitere Tests gemacht. Erstmal der Sketch dazu mal im gesamten

#include "FastLED.h"

// define all the things

#define DATA_PIN    6
#define DATA_PIN2   3
#define LED_TYPE    WS2812B
#define COLOR_ORDER GRB
#define NUM_LEDS   117
#define NUM_LEDS2   30
const int LEDS_COUNT[] = {117, 30};
#define LED_STRIPE 1

CRGB leds[LED_STRIPE][NUM_LEDS];

uint8_t gHue = 0; // rotating "base color" used by many of the patterns
uint8_t gHueSlow = 0; // rotating "base color" used by many of the patterns

#define BRIGHTNESS          255
#define FRAMES_PER_SECOND  120

void setup() {
  delay(3000); // 3 second delay for recovery
  FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds[0], 117).setCorrection(TypicalLEDStrip);
  FastLED.addLeds<LED_TYPE, DATA_PIN2, COLOR_ORDER>(leds[1], 30).setCorrection(TypicalLEDStrip);
  FastLED.setBrightness(BRIGHTNESS);
  Serial.begin(115200);
}
void loop() {
  uint8_t BeatsPerMinute = 55;
  CRGBPalette16 palette = PartyColors_p;
  uint8_t beat = beatsin8( BeatsPerMinute, 64, 255);
  for ( int i = 0; i < LEDS_COUNT[0]; i++) { //9948
    leds[0][i] = ColorFromPalette(palette, gHue + (i * 2), beat - gHue + (i * 10));
  }
  FastLED.show();
  // insert a delay to keep the framerate modest
  FastLED.delay(1000 / FRAMES_PER_SECOND);

  // do some periodic updates

  EVERY_N_MILLISECONDS( 100 ) {
    gHueSlow++;  //
  }
  EVERY_N_MILLISECONDS( 20 ) {
    gHue++;  // slowly cycle the "base color" through the rainbow
  }
}

Wenn ich nun bei loop die leds[0] setzte, dann leuchtet der erste stripe komplett und richtig, aber es gehen 11 LEDs auf dem zweiten stripe an, wovon eine einzelne blinkt und die farbe wechselt.
Wenn ich aber nun die leds[1] setzte, dann ist alles schwarz und nichts geht.

ich versteh das einfach nicht.

Habe den Fehler gefunden und ist mir schon blöd, dass es so eine Kleinigkeit war. Falls es wen interessiert.

#define LED_STRIPE 1

muss so aussehen:

#define LED_STRIPE 2

Dachte er fängt da mit der 0 an und somit hab ich ne 1 gewählt. Damit der Compiler die 0 und 1 hat.
Aber anscheinend deutet der die 2 als 0 und 1.

geht ja jetzt wieder alles ^^

Du kannst nicht einfach ein 2 dimensionales Array definieren wo die Bibliothek ein 1 dimensionales erwartet.