WS2812b LED-streifen aktualisiert sich erst nach zweitem aufruf

Gast #6225926
Lesenswert?

Guten morgen,

ich habe schon länger ein Problem mit einem WS2812b LED-streifen.
1
#define WS2818_SEND_DATA_DELAY 50
2
#define WS2818_MAX_PIXEL 110 
3

4

5
CRGB ws2818Array[WS2818_MAX_PIXEL];
1
        /* Setzen der LEDs */
2
        for (n=0; n<WS2818_MAX_PIXEL; n++)
3
        {
4
          if(wordArray[n]==1)
5
          {
6
            ws2818Array[n].r=50;
7
            ws2818Array[n].g=50;
8
            ws2818Array[n].b=50;
9
            sendArray((uint8_t *) ws2818Array);
10
          }
11
          else
12
          {
13
            ws2818Array[n].r=0;
14
            ws2818Array[n].g=0;
15
            ws2818Array[n].b=0;
16
            sendArray((uint8_t *) ws2818Array);
17
          }
18
        }
19
        _delay_ms(WS2818_SEND_DATA_DELAY);

wordArray ist ein 110 langer array, welches eine Matrix wiederspiegelt.

Das Problem ist nun, dass die Änderung der LEDs erst gemacht werden, 
wenn ich diese schleife ein zweites mal durchlaufen habe.
Setze ich das _delay_ms jeweils direkt nach der funktion sendArray, wird 
es direkt übernommen(so sieht es zumindest aus). Allerdings dann nicht 
alle LEDs auf einmal, sondern eine nach der anderen.
Angehängte Dateien:
Gast #6226168
Lesenswert?

Joachim S. schrieb:
> Der Fehler wird vermutlich ganz banal damit zusammenhängen, dass Du
> sendArray innerhalb der Schleife aufrufst. Statt sendArray direkt nach
> der Schleife und direkt vor dem _delay_ms aufzurufen.

Dem war auch so. Besten dank :)

Habe eigentlich gedacht, dass es so wie beim SPI wäre. also einfach wenn 
neue bits vorne rein kommen die alten hinten raus (und beim nächsten 
vorne rein). Also dürfte es eigentlich keinen Unterschied machen, ob ich 
jetzt öfters neue daten rein schiebe oder alle auf einmal.

Aber trotzdem nochmal besten dank :)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren