RGB LED Farbe ändern mit voreingestellter Farbauswahl

Guten Tag,

ich bin neu hier und habe mein Arduino Uno seit 2 Tagen.
Ich programmiere momentan einfache Schaltungen und komme bei einer Sache nicht weiter.
Ich habe habe eine RGB-LED und möchte über eine Voreinstellung die Grundfarbe (rot,blau oder grün) über die Monitorabfrage festlegen.
Diese Farbe soll sich aber mit dem Potentiometer ändern.
Je nach Auswahl ist blau,grün,rot festgelegt (jeweiliger Pin mit digitalWrite auf HIGH) und die zwei anderen Parameter sollen sich über den Input des Potentiometers ändern.
Wenn ich am Potentiometer drehe passiert erstmal nichts. Nur wenn ich die Farbe erneut eintippe und das Programm vermutlich nochmals die if-Abfrage durchläuft, ändert sich die Farbe?!

Der Code:
int LEDred=3;
int LEDgreen=9;
int LEDblue=10;
int Wandler=A3;
int wandler;
int Eingang;
String myColor;
String msg="Welche Farbe soll deine Grundfarbe sein?";

void setup() {
// put your setup code here, to run once:
pinMode(LEDred, OUTPUT);
pinMode(LEDgreen, OUTPUT);
pinMode(LEDblue, OUTPUT);
pinMode(Wandler, INPUT);
Serial.begin(9600);
}

void loop() {
// put your main code here, to run repeatedly:
Serial.println(msg);
while (Serial.available()==0);{
}
myColor=Serial.readString();
Eingang=analogRead(Wandler);
wandler=Eingang*(255./1023.);
if (myColor=="rot" || myColor=="Rot"){
digitalWrite(LEDred,HIGH);
analogWrite(LEDgreen,wandler);
analogWrite(LEDblue,wandler);
}

if (myColor=="grün"|| myColor=="Grün"){
analogWrite(LEDred,wandler);
digitalWrite(LEDgreen,HIGH);
analogWrite(LEDblue,LOW);
}
if (myColor=="blau"|| myColor=="Blau"){
analogWrite(LEDred,wandler);
analogWrite(LEDgreen,wandler);
digitalWrite(LEDblue,HIGH);
}
}
Wie muss ich das Programm ändern, dass die LED ihre Farbe ändert ohne dass ich per Texteingabe die Farbe aktualisiere? Wird die if-Abfrage nur bei Änderung meines Inputtextes aktualisiert oder was mache ich falsch?

Vielen Dank im Voraus!
Liebe Grüße

Na...

Mathe? den ziehe ich zurück - ich hab den . übersehen.
Siehe #4

Wenn Du in Deinem ersten Post den Code in Codetags setzt, lesen das auch noch User die mobile Geräte einsetzen.

while (Serial.available()==0);{
}

Da wartest Du bis eine Eingabe erfolgt.
Danach läufst Du genau einmal durch den Code und wartest dann wieder.

Ich würde die msg einmal am Ende von setup() ausgeben und dann - wenn was auf der Schnittstelle vorhanden ist - nur myColor ändern und den Rest immer ausführen:

if (Serial.available() != 0) {
  myColor=Serial.readString();
  Serial.println(msg);
}

Gruß Walter

2 Likes

Na bis dahin bin ich gar nicht gekommen.
recht hast!!!

Ja, ich werde wohl auch dazu übergehen nicht lesbaren Code zu ignorieren.

Vielen Dank Walter! Hat funktioniert! Eigentlich nicht so schwer, aber ich tue mir manchmal noch mit der Denkweise schwer..:smiley:

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.