Adafruit color offsets

Hi, ich versuche ein paar anpassbare Modi für eine adressierbare LED Strip zu bauen und möchte R, G und B einzelnt in einer Color variable verändern. Wie kann ich zum Beispiel hier:

strip.Color(0, 0, 200);

in einer for-Schleife, nur den R Wert inkrementieren?

Ich speichere diese Color Variablen in einem uint32_t Array und muss sie für meinen vorgesehenen Effekt verändern (faden).
Beispiel im Pseudocode:

uint32_t Array[0] = strip.Color(0, 0, 200);

Array[0].bOffset += 10; ODER Array[0][2] += 10;

Empfangen möchte ich die Farbe nämlich über Bluetooth aus einer Android-App.
Mir würde nur die Lösung einfallen, RGB als 3 Variaböen zu speichern, was ich nicht sehr prakitkabel finde.

Hat jemand eine bessere Idee?

Wieso nimmst Du nicht drei 1 Byte Variblen, eine für jede Farbe?

Grüße Uwe

noiasca:

  uint32_t oldColor = 0x005500;

uint32_t newColor = 0;
  for (uint8_t i = 0; i < 255; i++)
  {
    newColor = oldColor & 0xFFFF; // wir verUNDen und es bleiben nur mehr die Farben Grün und Blau über
    newColor += (uint32_t)i << 16; // i um 16 Stellen an die Stelle Rot shiften und “dazuzählen”
    Serial.println(newColor, HEX);
  }

Genau das habe ich gesucht, danke! Ich bin leider nicht allzu fit in dem Thema Bitweise Operationen, daher habe ich noch eine Frage:
Wenn ich eine Farbe (rot/blau/grün) abfragen will, wie limitiere ich auf die richtigen bits beim lesen?
So etwa?

uint8_t red = (oldColor & 16711680 [bzw. 0xFF0000]) >> 16;
uint8_t green = (oldColor & 65280 [bzw. 0xFF00]) >> 8;
uint8_t blue = (oldColor & 255 [bzw. 0xFF]);

Reicht dann der Datentyp uint8_t oder brauche ich 24 bzw. 32 bits?

So etwa?

Wenn du nicht 16711860 schreibst, dann schon, ja.
Dieser Zahl sieht außer dem Compiler keiner an, was du willst. Und der macht es dann prompt so wie du es hingeschrieben hast, und du findest den Fehler nicht. :wink:

Da die Rechnung mit dem Datentyp uint32_t ( für oldColor ) anfängt, wird richtig gerechnet.
Und da du weißt, dass das Ergebnis in ein byte passt, kannst du diesen Datentyp auch für deine Variablen red usw. verwenden.