[Anfänger] Problem mit Farbwechsel einer RGB LED

Mahlzeit,

ich habe ein einfaches Sketch für eine RGB LED geschrieben in dem eigentlich die Farben von Rot auf Blau, weiter auf Grün und dann wieder Rot... und halt immer die Runde, halt mit den Mischfarben.

Die For-Schleife habe ich in einer Funktion, in der die eine Variable von 0 auf 255 und die andere halt entsprechend runter gezählt wird.

Dann wird diese Funktion drei mal aufgerufen.

Leider entspricht das Verhalten der LED gar nicht dem, was ich erwarten würde.

Erst leuchtet sie einmal langsam Rot auf, geht ganz kurz aus, ist dann Blau und geht dann über Lila zu Rot und dann fängt der wechsel wieder an mit Blau, über Lila zu Rot und macht dies die ganze Zeit.

Ich vermute ich habe einen schweren Gedankenfehler, aber ich komme nicht dahinter.

Hier mal der ganze Code:

//Pins Definieren
#define BLUE 3
#define GREEN 5
#define RED 6

void setup() {
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(BLUE, OUTPUT);
}
// Funktion zum Farben wechseln 
void farbwechel(int x,int y){
  for(int i = 0; i != 255; i++){
    analogWrite(x, i);
    analogWrite(y, (255-i));
    delay(10);
  }
}

void loop() {
  farbwechel(BLUE, RED);    //Blau wird heller, Rot wird dunkler
  farbwechel(GREEN, BLUE);  //Grün wird heller, Blau wird dunkler
  farbwechel(RED, GREEN);   //Rot wird heller, Grün wird dunkler
}

Würde mich freuen, wenn mir da mal wer auf die Sprünge helfen kann.
Beste Grüße
Mario

Hallo,

da bleiben die Werte die auf 255 hochgelaufen sind ja da stehen beim verlassen der for Schleife. Das verfälscht sicher das was Du erwartest.

Teste die drei Farben schrittweise einzeln , dazu kannst Du ja einfach mal die drei Zeile auskommentieren. Ist alles richtig angeschlossen , farben einzeln testen.

//Pins Definieren
#define BLUE 3
#define GREEN 5
#define RED 6

void setup() {
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(BLUE, OUTPUT);
}
// Funktion zum Farben wechseln
void farbwechel(int x,int y){
  for(int i = 0; i != 255; i++){
    analogWrite(x, i);
 //   analogWrite(y, (255-i));
    delay(10);
  }
analogWrite(x,0); // reset den hochgelaufen Wert
}

void loop() {
  farbwechel(BLUE, RED);    //Blau wird heller, Rot wird dunkler
//  farbwechel(GREEN, BLUE);  //Grün wird heller, Blau wird dunkler
//  farbwechel(RED, GREEN);   //Rot wird heller, Grün wird dunkler
}

damit müsste ja blau langsam von 0 auf 255 steigen und dann wieder bei 0 anfangen.

Außerdem solltest Du evtl. beachten, dass LED und Auge nicht linear sind. Infos dazu gibt es z.B. hier.

Gruß Tommy

schau Dir mal das HUE Farbmodell an. zB Arduino Programming - HSB to RGB ⋆ Kasper Kamperman
Da hast Du einen Farbkreis von 0 bis 359 der über alle Farben läuft. Helligkeit und Sättigung können immer gleich bleiben.

Grüße Uwe

Crossposting -> Im Raspiforum

Was hat er nu? Nen Arduino oder eine Rasberry?
Laufen auf der Beere Arduino-Sketche?
Oder haben die im Raspberry-Forum bessere Antworten für Arduino als wir im Arduino-Forum?
Bin ich im falschen Forum Moderator?

uwefed:
Was hat er nu? Nen Arduino oder eine Rasberry?

Vielleicht beides.

uwefed:
Laufen auf der Beere Arduino-Sketche?

uwefed:
Oder haben die im Raspberry-Forum bessere Antworten für Arduino als wir im Arduino-Forum?

Nur andere Antworten.

uwefed:
Bin ich im falschen Forum Moderator?

Kannst nur du wissen.

Finnlay:
Crossposting -> Im Raspiforum

Ja, und dort hatte ich keine Hilfreiche Antwort bekommen bis ich hier gepostet habe.
Nun sind da noch welche zugekommen. Muss mal schauen.

Finnlay:
Crossposting -> Im Raspiforum

uwefed:
Was hat er nu? Nen Arduino oder eine Rasberry?
Laufen auf der Beere Arduino-Sketche?
Oder haben die im Raspberry-Forum bessere Antworten für Arduino als wir im Arduino-Forum?
Bin ich im falschen Forum Moderator?

Ich habe beides. Sogar noch vieles mehr.... ist aber vollkommen egal was ich alles habe, ich frage hier wegen einem Arduino.

Aber recht habt ihr, Crosspostings sind nicht so doll.

Bei Beispiele / Analog / Fading gibt es einen Beispiel-Sketch, der die LED (in dem Fall 9) heller und dunkler werden lässt. Funktioniert das mit dem Arduino, wenn du die LED 9 auf 3, 5 bzw. 6 änderst?