Serielle Datenstring vom Computer im Adruino Mega einlesen und aufteilen

Ja, das geht - ist dann etwas anders und auch aufwändiger abzuhandeln.

Ne - wieso? Das war doch schon Thema.
Dann bleiben Dir da Pins frei - Na und?

Nochmal: Du hast die ganze andere Seite frei.
Und wenn Du PWM nicht brauchst auch da jeden einzelnen PIn.
Du hast Pin's im Überfluss.

Es gibt etwas, was endlich ist.
Na dann.

In #240 habe ich noch einen Fehler gefunden, besser so:

  for (uint8_t i = 0; i < sizeof(ledPin); i++)
  {
    pixel[i].begin();
  }

Was meinst Du zu 58?

// Licht
#include <Adafruit_NeoPixel.h>
// für die pixels
const uint8_t ledPin[3] = {3, 4, 5}; // WS2812 LEDs
const uint16_t numPixel[3] = {5, 5, 5}; // Anzahl WS2812 LEDs
Adafruit_NeoPixel pixel[] = { Adafruit_NeoPixel(numPixel[0], ledPin[0], NEO_GRB + NEO_KHZ800),
                              Adafruit_NeoPixel(numPixel[1], ledPin[1], NEO_GRB + NEO_KHZ800),
                              Adafruit_NeoPixel(numPixel[2], ledPin[2], NEO_GRB + NEO_KHZ800)
                            };
const byte wsr[4] = {43, 45, 47, 49}; // Wahlschalter Rechts "Beleuchtung Unten,Beleuchtung Oben,Beleuchtung Eingang,Externe Steuerung"
const byte TLLED = 39; // LED im Taster Links

void setup()
{
  pinMode(TLLED, OUTPUT);
  for (byte w : wsr) pinMode(w, INPUT_PULLUP);
  for (Adafruit_NeoPixel &p : pixel) p.begin();
}

void loop()
{
  neoPixels();
}

void neoPixels()
{
  static uint8_t stripeAuswahl = 255;
  // Auswahl, was beleuchtet wird mit Wahlschalter rechts
  // Beleuchtung Unten, Beleuchtung Oben, Beleuchtung Eingang, Externe Steuerung
  for (uint8_t s = 0; s < sizeof(wsr); s++)
  {
    if ( !digitalRead(wsr[s]) && (stripeAuswahl != s) )
    {
      stripeAuswahl = s;
      digitalWrite(TLLED, s != 3);
      for (uint8_t p = 0; p <  sizeof(ledPin); p++) // Anzahl der initialisierten Stripe
      {
        pixel[p].clear();                           // setzt alle Pixel auf dem Stripe dunkel - wegen for() also alle
      }
      switch (stripeAuswahl)
      {
        case 0:
          pixel[stripeAuswahl].fill(0x00FA00, 0);   // Stripe setzen - Farbe, ab LED 0
          break;
        case 1:
          pixel[stripeAuswahl].fill(0x00FFFF, 0);   // Stripe setzen - Farbe, ab LED 0
          break;
        case 2:
          pixel[stripeAuswahl].fill(0xFF0000, 0);   // Stripe setzen - Farbe, ab LED 0
          break;
      }
      for (uint8_t p = 0; p <  sizeof(ledPin); p++) // Anzahl der initialisierten Stripe
      {
        pixel[p].show();
      }
    }
  }
}

Mir geht es aber nicht um die Zeilenzahl, sondern die einfachere Art der Programmierung.

Manchmal landet man einen Treffer :slightly_smiling_face:

Nun ja, eigentlich nicht, nur 50 Zeilen:

// Licht
#include <Adafruit_NeoPixel.h>
// für die pixels
const uint8_t ledPin = 3; // WS2812 LEDs
const uint16_t numPixel = 7; // Anzahl WS2812 LEDs
Adafruit_NeoPixel pixel(numPixel, ledPin, NEO_GRB + NEO_KHZ800);
const byte wsr[4] = {43, 45, 47, 49}; // Wahlschalter Rechts "Beleuchtung Unten,Beleuchtung Oben,Beleuchtung Eingang,Externe Steuerung"
const byte TLLED = 39; // LED im Taster Links

void setup()
{
  pinMode(TLLED, OUTPUT);
  for (byte w : wsr) pinMode(w, INPUT_PULLUP);
  pixel.begin();
  pixel.show();
}

void loop()
{
  neoPixels();
}

void neoPixels()
{
  static uint8_t s_alt = 255;
  // Auswahl, was beleuchtet wird mit Wahlschalter rechts
  // Beleuchtung Unten, Beleuchtung Oben, Beleuchtung Eingang, Externe Steuerung
  for (uint8_t s = 0; s < sizeof(wsr); s++)
  {
    if ( !digitalRead(wsr[s]) && (s_alt != s) )
    {
      s_alt = s;
      digitalWrite(TLLED, s != 3);
      pixel.fill(0x000000, 0);   // setzt alle Pixel auf dem Stripe dunkel
      switch (s)
      {
        case 0:
          pixel.fill(0x00FA00, 0, 1);   // Stripe setzen - Farbe, ab LED 0
          break;
        case 1:
          pixel.fill(0x00FFFF, 1, 3);   // Stripe setzen - Farbe, ab LED 1
          break;
        case 2:
          pixel.fill(0xFF0000, 3, 3);   // Stripe setzen - Farbe, ab LED 3
          break;
      }
      pixel.show();
    }
  }
}

:innocent:

Hallo my_xy_projekt,

zu deinem Code in #240 im setup ein Hinweis.
Ich bin mir sicher das hier auf <3 oder <=2 verglichen werden sollte, weil das pixel Array die Größe 3 (0...2) hat.

for (uint8_t i = 0; i < 2; i++)
  {
    pixel[i].begin();
  }

Die Range-based Variante ermittelt die Anzahl automatisch. Welchen Bezeichner du nimmst ist dir überlassen. Ich nehme meistens weiterhin i für Index, agmue nimmt p für Pixel, alles egal.

for (Adafruit_NeoPixel &i : pixel) 
  {
    i.begin();
  }

Nachteil von Range-based ist, man hat keinen Zugriff auf den eigentlichen Indexzähler. Deswegen kann man das hier nicht für i anwenden. Aber das habt hier ja schon anderweitig gelöst und wegoptimiert.

void setPixel( ... )
{
  for (uint8_t i = 0; i < anzahl; i++)
  {
    pixel[0].setPixelColor(i, b);
    pixel[1].setPixelColor(i, c);
    pixel[2].setPixelColor(i, d);
  }

Weitermachen ... :grinning:

In #243 steht das auch.

Aber wir sind uns einig und doppelt hält besser :slightly_smiling_face:

@agmue & @Doc_Arduino
Ihr seit lieb :wink:
Bitte bedenkt: Es ist nicht mein Vorhaben.
Ich habe in den vielen vergangenen Post's auch etwas zurück gesteckt.
Insbesondere was jetzt die NeoPixels angeht wird uns da sicher noch einiges beschäftigen.

JA! Und eigentlich habe ich darauf gewartet, das dem TO das auf die Füsse fällt. Irgendwie ist das aber unter gegangen.
Für mich kann ich nur auf den SerMon zurückgreifen - ich bin also genauso blind wie ihr. Ich hab für mich nur festgelegt das nicht in einem Satz zu komplettieren. @Benziner muss das ja auch aufnehmen. Und das geht m.E. ganz gut, wenn etwas nicht geht und dann die Frage im Raum steht warum.
Hatten wir gerade. #229/#230

Der war gut.
Sowas hatte ich schon - bin aber wieder von ab, denn das setzen der Pixels erfolgt im "extern"-Modus ja auch noch.
Da hatte ich darauf gehofft die Funktion erneut verwenden zu können. - und auch hier: es muss erklärt werden, wenn eine 32-bitVar verwendet wird, die aber nur 3 Werte (je Farbe eine) â 8 bit aufnimmt und auch nur bis dahin auswertet.

Gut ihr lieben - ich bin für heute wieder raus.
Vielen Dank für Eure Unterstützung.

Nee, bei mir leuchtet es! In meinem Avatar siehst Du neun Lichtpunkte auf einem Steckbrett, die ich zum Testen verwende und hier auch verwendet habe.

Mir hat es in den Fingern gejuckt, ich bitte um Nachsicht :blush:

Hallo,

und ich dachte ihr könnt das alle praktisch testen außer ich. Ich kann da auch nicht weitermachen, außer über den Code schauen ob etwas generell auffällig wäre. Außerdem muss ich mal kürzer treten, sitze viel zu viel vorm Rechner ... :crazy_face:

So,nach einem aufregenden Wochenende-Anfang, Chef ist am Freitag positiv getestet worden und ich musste mich Aufgrund dessen ausquartieren ..... meiner lieben Frau zu liebe. Gestern das Ergebnis " Negativ " puhh Schwein gehabt. Ab zurück nachhause.... :smiley:

Jetzt hab ich alles getestet was Ihr so fleißig geschrieben habt. Hierzu bin ich @my_xy_projekt @Doc_Arduino @agmue wieder zu tausend Dank verpflichtet. Hab wieder gemerkt das ich nichts drauf habe, wollte ich doch ein Array schreiben für die Farben, damit ich sie aus dem Menü hinterher ändern kann.
Bekomme nicht so wirklich hin. :sleepy: Nun glaub ich auch das mein Projekt nicht gerade was für Anfänger ist...... Was würde ich nur ohne Euch machen....

Nun zu Euren Sketches, Es funktionieren beide Versionen, wobei ich die letzere bevorzuge.
Keine Änderung der Pin´s nötig.Aber dafür habe ich von XY Projekt gelernt was mit den weiteren Pin´s noch so möglich ist. Danke für Deine Arbeit.

// Licht
#include <Adafruit_NeoPixel.h>
// für die pixels
const uint8_t ledPin = 3; // WS2812 LEDs
const uint16_t numPixel = 7; // Anzahl WS2812 LEDs
Adafruit_NeoPixel pixel(numPixel, ledPin, NEO_GRB + NEO_KHZ800);
const byte wsr[4] = {43, 45, 47, 49}; // Wahlschalter Rechts "Beleuchtung Unten,Beleuchtung Oben,Beleuchtung Eingang,Externe Steuerung"
const byte ext[4] = {42, 44, 46, 48}; // Eingänge Externe Steuerung für Beleuchtung
byte Fb1[3] = {50, 0, 0}; // Auswahl RGB Beleuchtung Unten
byte Fb2[3] = {0, 50, 0}; // Auswahl RGB Beleuchtung Oben
byte Fb3[3] = {0, 0, 50}; // Auswahl RGB Beleuchtung Eingang
int x = 0;

void setup()
{
  for (byte w : wsr) pinMode(w, INPUT_PULLUP);
  for (byte e : ext) pinMode(e, INPUT_PULLUP);
  pixel.begin();
  pixel.show();

}

void loop()
{
  neoPixels();
  x++;
}

void neoPixels()
{
  static uint8_t s_alt = 255;
  // Auswahl, was beleuchtet wird mit Wahlschalter rechts
  // Beleuchtung Unten, Beleuchtung Oben, Beleuchtung Eingang, Externe Steuerung
  for (uint8_t s = 0; s < sizeof(wsr); s++)
    if ( !digitalRead(wsr[s]) && (s_alt != s) )
    {
      s_alt = s;
      pixel.fill(0x000000, 0);   // setzt alle Pixel auf dem Stripe dunkel
      switch (s)
      {
        case 0:
          // Farbe Pixel
          long RGB1;
          RGB1 = pixel.Color(Fb1[0], Fb1[1], Fb1[2]);
          pixel.fill(RGB1, 0, 1);         // Stripe setzen - Farbe, ab LED 0
          break;
        case 1:
          // Farbe Pixel
          long RGB2;
          RGB2 = pixel.Color(Fb2[0], Fb2[1], Fb2[2]);
          pixel.fill(RGB2, 1, 3);         // Stripe setzen - Farbe, ab LED 1
          break;
        case 2:
          // Farbe Pixel
          long RGB3;
          RGB3 = pixel.Color(Fb3[0], Fb3[1], Fb3[2]);
          pixel.fill(RGB3, 4, 3);         // Stripe setzen - Farbe, ab LED 3
          if (x > 1000) {
            //    Fb3[3] = {250, 250, 250}; Funktioniert nicht???
            Fb3[0] = {255}; // Funktioniert erst nach Schalter Stellungswechsel
            Fb3[1] = {255}; // "
            Fb3[2] = {255}; // "
          }
          break;
      }

    }
  pixel.show();
}

Hier mal mein versuch, selbst mal weiterzukommen.....

Kann man so sagen :mask:

Ich bin unschlüssig, ob ich mich einmischen soll, da mir der Überblick über das Gesamtkunstwerk abhanden gekommen ist. Allerdings könnte ich meine LEDs in die Waagschale werfen :thinking:

Hallo agmue,
ich glaube @my_xy_projekt hat nichts dagegen einzuwenden wenn es um die Pixel geht...hat mit mir so schon genug am Bein. :roll_eyes: Aber ich möchte Ihm da nicht vorweg greifen, sollten seine Antwort abwarten.

Die Hochzeit mit Empfänger und agmue´s Pixel-Steuerung im Anhang.
Turm_Empfaenger_v30.4.ino (15.5 KB)

Womit alles gesagt ist.
Nur darauf achten, das ihr im loop entweder neue Funktionen eintragt für Dinge, die ich nicht bearbeite und nicht dort.
Dann beim aufteilen vorher nachdenken, was passiert, wenn ihr dort einen weiteren case in Anspruch nehmt. Schön wäre sich an die bisherige Idee dahinter zu halten.

Ansonsten: @Benziner: Alles Beste!

Wiederholungstests machen.

Gut ihr lieben - bis die Tage.

Bis die Tage, erhole Dich.....ich hoffe ich habe in Deinem Sinne gehandelt.
Ein paar Tage ohne mich werden Dir bestimmt gut tun. :wink:

Und gebt auf euch acht, wie schnell man dabei sein kann zeigt Euch mein Fall.
Gruß aus dem Tal

Eher nicht. Aber auch das geht vorbei.

Na denne - Euch viel Erfolg!
Und:

Sag mal gehts noch!? - Du hast hier in einem nicht zu unterschätzendem und nachweislich unermüdlichem Einsatz gezeigt, das Dir Dein Vorhaben mehr als nur als eine Spielerei wert ist!

So'n Teilchen wächst!
Aufgabe war: Teile übergebene Zeichenkette.
Das wars. - Ist erfolgt? Ja? Nein? Vielleicht?
Bitte nicht beides ankreuzen.

Alles was jetzt kommt, ist "Mehrwert".
Ja, hätte in der Anforderung drin stehen können - hätte mir das jemand als "Erweiterung" nach Pflichten- / Lastenheft hingeschmissen, wären Fragen gekommen...

Das ist ein - für mich nachgewiesener - privater und in der Ursprungsidee nicht mal ansatzweise vorhersehbarer Umstand.

Somit Alles Gut!
Mehr noch: Es zeigt, das modulare Konzepte besser zu handhaben sind.
Da ich mitlerne und davon ausgehe, das ich nicht allein bin: Keine Gedanken machen!

Na dann...

Ich glaube zu verstehen wie Du das meinst...paar Tage raus aus den Projekt...und man braucht wieder ein Tag um rein zukommen.

Den unermüdlichen Einsatz hast Du gezeigt, mit Deinen über vielen Beiträgen,Sketche nicht zuletzt doch die eigentliche komplette Ausführung. Klar es war es von Anfang an keine Spielerei für mich, aber seien wir doch mal Ehrlich was habe ich Produktives dazu beigetragen?

Es hat mal ein kluger Mann gesagt; Die Möglichkeiten wachsen mit den Wissen !
Doch wenn das Wissen eingeschränkt ist bleiben die Möglichkeiten es auszubauen aus.
Also es ist Dein Erfolg !!! Wofür ich Dir, wie immer unendlich Dankbar bin.

Klar, hab ich das ein oder auch andere verstanden wie es funktioniert......mit anderen Worten ich habe etwas gelernt. Die richtige Umsetzung muss nur noch folgen...
Ich arbeite daran.....

Freu mich drauf, mit, und von Dir/Euch zu lernen.
Bis denne

Dann will ich mal mein Glück versuchen. Ich beziehe mich auf das Programm in #251, da ergeben sich ein paar Fragen.

  1. Was ist die Idee von // Eingänge Externe Steuerung für Beleuchtung? Die Eingänge werden derzeit nicht verwendet.
  2. Fb1 usw. sind keine Konstanten, soll da mal was verändert werden? Warum eine Speicherung als Feld? Was ist die Idee?
  3. Derzeit macht es keinen praktischen Unterschied, aber spätestens bei RGBW-Farben wird es relevant, daher besser unsigned long RGB1; oder uint32_t RGB1;.
  4. Der Sinn hinter der Variablen x hat sich mir noch nicht erschlossen.

Hallo agmue,
schön das Du Dein Glück versuchen möchtest. Da es schon wieder recht spät geworden ist muss ich Dich auf morgen vertrösten. Die Steuerung der Beleuchtung wird aus meiner Sicht nicht ganz so einfach. Es bedarf einer längeren Erklärung.... :wink:

So, ich wünsch euch allen en gut Nächtle.
Und bleibt Gesund

Abend, nun versuche ich es mal es zu vermitteln......

  1. Der Arduino steht unter der Bahn, also nicht so gut zu erreichen. Die Beleuchtung wird bis
    Dato von einer SPS an Rennerleiterpult über ein Touchpanel gesteuert. Wegen Knie und
    Rücken sollte diese Möglichkeit beibehalten werden. :joy: Aber eben nur wenn Wsr den Wert 3
    hat .
    Turm_Empfaenger_v30.4.ino (16.2 KB)

  2. Ja, den es soll möglich sein die 3 einzelnen Farbwerte über LCD-Anzeige mit RotaryEncoder zu
    verändern und im EEprom abzuspeichern.

  3. unsigned long RGB1 spricht also für Punkt 2.

  4. Variable x für Türbeleuchtung "muss nur einmal gesetzt werden da immer an"

Hier eine kleine Beschreibung für RotaryEncoder den die Wahlschalter sollen später raus.

Im Anhang mein Versuch es erstmal mit Wahlschalter hin zubekommen.

Pixel Steuerung Planung.... Änderung wegen RotaryEncoder
Led 0 immer an "Treppen-Beleuchtung"
Wahlschalter Rechts... Neu Auswahl Rorary int Wrs=0; bis Wrs=3;
Wsr 0 Nur Unten an
Wsr 1 Nur Oben an
Wsr 2 Oben / Unten an
Wsr 3 Externe Steuerung + Unten / Oben aus

Externe Steuerung wenn Wert Wsr=3... (Neu Auswahl Rotary int ext=0; bis ext=2;)
ext 0 solange Belegt unten an
ext 1 solange Belegt Oben an
ext 2 wenn Belegt alle Led´s 1-7 Orange blinken

Ich hoffe das Du halbwegs verstehen konntest wie und was ich meine.....

Nun ja, vermutlich eher nicht. Aber was ich verstanden habe, ist in diese Änderung eingeflossen:

// Licht
#include <Adafruit_NeoPixel.h>
// für die pixels
const uint8_t ledPin = 3; // WS2812 LEDs
const uint16_t numPixel = 7; // Anzahl WS2812 LEDs
Adafruit_NeoPixel pixel(numPixel, ledPin, NEO_GRB + NEO_KHZ800);
byte Fb1[3] = {55, 20, 0};                                // Auswahl RGB Beleuchtung Eingang
byte Fb2[3] = {0, 50, 0};                                 // Auswahl RGB Beleuchtung Unten
byte Fb3[3] = {0, 0, 50};                                 // Auswahl RGB Beleuchtung Oben
const byte wsr[4] = {43, 45, 47, 49}; // Wahlschalter Rechts "Beleuchtung Unten,Beleuchtung Oben,Beleuchtung Eingang,Externe Steuerung"
const byte ext[4] = {42, 44, 46, 48}; // Eingänge Externe Steuerung für Beleuchtung "Beleuchtung Unten,Beleuchtung Oben,Beleuchtung Eingang,Beleuchtung Chaos"

void setup()
{
  for (byte w : wsr) pinMode(w, INPUT_PULLUP);
  for (byte e : ext) pinMode(e, INPUT_PULLUP);
  pixel.begin();
  pixel.fill(pixel.Color(Fb1[0], Fb1[1], Fb1[2]), 0, 1);         // Stripe setzen - Farbe, ab LED 0
  pixel.show();
}

void loop()
{
  neoPixels();
}

void neoPixels()
{
  uint32_t jetzt = millis();
  static uint32_t vorhin = 0;
  const uint32_t intervall = 200;
  bool pixelupdate = false;
  static bool blinken = false, e_alt[] = {true, true, true};
  static uint8_t w_alt = 255;
  // Auswahl, was beleuchtet wird mit Wahlschalter rechts
  // Beleuchtung Unten, Beleuchtung Oben, Beleuchtung Eingang, Externe Steuerung
  for (uint8_t s = 0; s < sizeof(wsr); s++)
  {
    if ( !digitalRead(wsr[s]) && (w_alt != s) )
    {
      w_alt = s;
      blinken = false;
      pixel.fill(0x000000, 1);   // setzt alle Pixel ab 1 auf dem Stripe dunkel
      switch (s)
      {
        case 0:
          // Beleuchtung Unten
          pixel.fill(pixel.Color(Fb2[0], Fb2[1], Fb2[2]), 1, 3);         // Stripe setzen - Farbe, ab LED 1, für 3 LED
          break;
        case 1:
          // Beleuchtung Oben
          pixel.fill(pixel.Color(Fb3[0], Fb3[1], Fb3[2]), 4, 3);         // Stripe setzen - Farbe, ab LED 4, für 3 LED
          break;
        case 2:
          // Beleuchtung Oben / Unten
          pixel.fill(pixel.Color(Fb2[0], Fb2[1], Fb2[2]), 1, 3);         // Stripe setzen - Farbe, ab LED 1, für 3 LED
          pixel.fill(pixel.Color(Fb3[0], Fb3[1], Fb3[2]), 4, 3);         // Stripe setzen - Farbe, ab LED 4, für 3 LED
          break;
        case 3:
          // Beleuchtung extern
          break;
      }
      pixelupdate = true;
    }
  }
  if (w_alt == 3)
  {
    if ( digitalRead(ext[0]) != e_alt[0] )
    {
      if ( e_alt[0] )
      {
        pixel.fill(pixel.Color(Fb2[0], Fb2[1], Fb2[2]), 1, 3);         // Pixel setzen - Farbe, ab LED 1, für 3 LED
      } else {
        pixel.fill(0, 1, 3);                                           // Pixel aus, ab LED 1, für 3 LED
      }
      e_alt[0] = !e_alt[0];
      pixelupdate = true;
    }
    if ( digitalRead(ext[1]) != e_alt[1] )
    {
      if ( e_alt[1] )
      {
        pixel.fill(pixel.Color(Fb3[0], Fb3[1], Fb3[2]), 4, 3);         // Pixel setzen - Farbe, ab LED 4, für 3 LED
      } else {
        pixel.fill(0, 4, 3);                                           // Pixel aus, ab LED 4, für 3 LED
      }
      e_alt[1] = !e_alt[1];
      pixelupdate = true;
    }
    if ( digitalRead(ext[2]) != e_alt[2] )
    {
      blinken = e_alt[2];
      if ( !e_alt[2] )
      {
        e_alt[0] = true;
        e_alt[1] = true;
        pixel.fill(0, 1, 6);                            // Pixel aus, ab LED 1, für 6 LED
        pixelupdate = true;
      }
      e_alt[2] = !e_alt[2];
    }
  }
  if (blinken)
  {
    if (jetzt - vorhin >= intervall)
    {
      vorhin = jetzt;
      if (pixel.getPixelColor(1) > 0)
      {
        pixel.fill(0, 1, 6);                              // Pixel aus, ab LED 1, für 6 LED
      } else {
        pixel.fill(pixel.Color(55, 20, 0), 1, 6);         // Pixel setzen - Farbe, ab LED 1, für 6 LED
      }
      pixelupdate = true;
    }
  }
  if (pixelupdate) pixel.show();
}

Pin 48 ist bei mir unbenutzt.

Möglicherweise kannst Du ja was für Dich verwenden :slightly_smiling_face:

Ich hab das ino noch nicht gesehen - da steckt m.E. noch ganz viel Potential drin.

Warum sind da so Unmengen von if's drin? Im setup() bist Du auf Effizienz aus, das muss man verstehen - aber ich bin schon vorher bei e_alt ausgestiegen, weil ich nicht verstanden habe, was Du da vor hast.
Und bitte nicht schlagen, aber warum ist das kein 2D-Array?

byte Fb1[3] = {55, 20, 0};                                // Auswahl RGB Beleuchtung Eingang
byte Fb2[3] = {0, 50, 0};                                 // Auswahl RGB Beleuchtung Unten
byte Fb3[3] = {0, 0, 50};                                 // Auswahl RGB Beleuchtung Oben

Na dann...