WS2812 - "Problem" mit sketch

Hallo Leute,

nachdem mir letztens die WS2812-Strip's empfohlen wurden und ich spaß damit habe, bin ich auf ein kleines Problem gestoßen, das mir nicht einleuchtet :wink:

Ich habe folgenden sketch:

// Neo Pixel Library
#include <Adafruit_NeoPixel.h>
#define PIN 6 // define signal PIN on Arduino
#define LEDno 10 // Number of LEDs in strip
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LEDno, PIN, NEO_GRB + NEO_KHZ800);

uint32_t blue = strip.Color(0, 0, 255);
uint32_t orange = strip.Color(200, 63, 6);
uint32_t green = strip.Color(0, 255, 0);
uint32_t red = strip.Color(255, 0, 0);

int PixelSet1[] = {0, 2, 4, 6, 8};

int color[] = {blue, orange, green, red};

void setup() {

  strip.begin();
  strip.show(); // Initialize all pixels to 'off'

  strip.setBrightness(64);

}

void loop() {
	dotted(150);
}


void dotted(uint8_t wait) {
for(int a=0; a<4; a++){
      for(uint16_t i=0; i<5; i++) {
        strip.setPixelColor(PixelSet1[i], color[a]);
        delay(wait);
        strip.show();
        }
          for(uint16_t i=0; i<strip.numPixels(); i++) {
          strip.setPixelColor(i, 0);
        
        delay(wait);
        strip.show();
      }
	}
}

er funktioniert soweit gut, doch es wird mir kein rot angezeigt. Auch das Orange ist Gelb, da das Rot fehlt.
Und "red" ist gar nicht da.

Allerdings, wenn ich color[a] durch "red" ersetze, leuchtet es in voller Pracht.
Auch das Orange ist das richtige wenn ich es nicht im array laufen lasse.

Ich wollte letztendlich so etwas umsetzen:

y = random(0,4)
color[y]

also das die Farben zufällig erscheinen.

Vielen dank für eine Erklärung, warum ausgerechnet rot nicht geht, bzw was ich falsch mache.

Gruß
Alex

int color[] = {blue, orange, green, red};

int? Für 24 bit Farben?

Rot ist die Farbe die im 3. Byte liegt, nur gibt es in ints (auf standard Arduinos) kein 3. Byte.

Ändere das in long/uint32_t, dann wird es wohl gehen.

danke das ist die Lösung :smiley:
da hätte ich nicht daran gedacht, da ich mich nicht bzw kaum mit uint32_t und so beschäftigt habe.

wird wohl Zeit :slight_smile:

Wick3d:
wird wohl Zeit :slight_smile:

Ja. :wink:

Hast du das bei den Grundlagen übersprungen?

Muss man aber auf jeder Plattform wieder machen, da die Größe eines int von der Implementation abhängt.

Wäre es nicht einfacher, die Farbwerte in einem zweidimensionalen Feld vom Typ Byte zu speichern und per Zufall eine Feldzeile auszuwählen?