RGB-LED steuern, zwei Taster mit unterschiedlichen Funktionen

Hallo zusammen,

ich habe mal ein bisschen mit einer RGB-LED und einem Taster herum gespielt. Wenn ich den Taster betätige wird jeweils eine Farbe angeschaltet (Entwerder Rot, Grün oder Blau). Nun habe ich mit dem Gedanken gespielt, das mit einem zweiten Taster der Modi, in welchem die jeweilige LED leuchtet, ummgeschaltet wird. Sprich ein z.B. zwischen blinken und faden.
Nochmal in Kurz: Ich möchte gerne zwei Taster, wovon einer die Farbe der LED steuert und der andere den Modi in welchem die LED leuchtet.
Leider reichen meine Kentnisse dafür nicht genug um das zu realisieren. Ich hoffe mir kann da jemand helden. :smiley:

Anbei habt ihr meinen jetzigen Sketch.

Liebe Grüßen
Max

rgbLED_switch.ino (1.25 KB)

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).

Gruß Tommy

[*code]
int buttonPin = 3;   
int buttonMode = 2;         \\für den Modi-Schalter gedacht
 
int ledRed =  9;
int ledGreen =  10;
int ledBlue =  11;

int state = 0; 
int old = 0;
int buttonPoll = 0;

void setup() {
  pinMode(ledRed, OUTPUT);    
  pinMode(ledGreen, OUTPUT); 
  pinMode(ledBlue, OUTPUT);   
  pinMode(buttonPin, INPUT);  
  pinMode(buttonMode, INPUT);

  analogWrite(ledRed, LOW);
  analogWrite(ledGreen, LOW);
  analogWrite(ledBlue, LOW);
}

void loop() {

      buttonPoll = digitalRead(buttonPin);
      if(buttonPoll == 1){
        delay(50);
        buttonPoll = digitalRead(buttonPin);
        if(buttonPoll == 0){
          state = old + 1;
          
 }}
 else{
 delay(100);
 }
switch (state) {
 case 1:
        analogWrite(ledRed, HIGH);
        analogWrite(ledGreen, LOW);
        analogWrite(ledBlue, LOW);
        old = state;
        break;
 case 2:
        analogWrite(ledRed, LOW);
        analogWrite(ledGreen, HIGH);
        analogWrite(ledBlue, LOW);
        old = state;
        break;
 case 3:
        analogWrite(ledRed, LOW);
        analogWrite(ledGreen, LOW);
        analogWrite(ledBlue, HIGH);
        old = state;
        break;
 default:
        analogWrite(ledRed, LOW);
        analogWrite(ledGreen, LOW);
        analogWrite(ledBlue, LOW);
        old = 0;
        break;
}

MrLooo:

[*code]

int buttonPin = 3; 
int buttonMode = 2;        \für den Modi-Schalter gedacht

int ledRed =  9;
int ledGreen =  10;
int ledBlue =  11;

int state = 0;
int old = 0;
int buttonPoll = 0;

void setup() {
  pinMode(ledRed, OUTPUT);   
  pinMode(ledGreen, OUTPUT);
  pinMode(ledBlue, OUTPUT); 
  pinMode(buttonPin, INPUT); 
  pinMode(buttonMode, INPUT);

analogWrite(ledRed, LOW);
  analogWrite(ledGreen, LOW);
  analogWrite(ledBlue, LOW);
}

void loop() {

buttonPoll = digitalRead(buttonPin);
      if(buttonPoll == 1){
        delay(50);
        buttonPoll = digitalRead(buttonPin);
        if(buttonPoll == 0){
          state = old + 1;
         
}}
else{
delay(100);
}
switch (state) {
case 1:
        analogWrite(ledRed, HIGH);
        analogWrite(ledGreen, LOW);
        analogWrite(ledBlue, LOW);
        old = state;
        break;
case 2:
        analogWrite(ledRed, LOW);
        analogWrite(ledGreen, HIGH);
        analogWrite(ledBlue, LOW);
        old = state;
        break;
case 3:
        analogWrite(ledRed, LOW);
        analogWrite(ledGreen, LOW);
        analogWrite(ledBlue, HIGH);
        old = state;
        break;
default:
        analogWrite(ledRed, LOW);
        analogWrite(ledGreen, LOW);
        analogWrite(ledBlue, LOW);
        old = 0;
        break;
}

Was genau klappt da denn bis jetzt?

Hi

Konstante Dinge ruihig const benennen - der LED-Pin wird sich wohl nicht zur Laufzeit ändern, oder?
Dadurch kann der Kompiler viel effizienteren Code erzeugen (da die Werte DIREKT im Code eingebaut werden können und nicht in Variablen vorgehanten werden müssen).
Wenn ein Wert nur positiv sein kann, ist ein Datentyp, Der zur Hälfte aus negativen Werten besteht ... äh ... blöd.
0...255 byte
-128...127 char
0...65535 unsigned int
-32168...31167 int
(und so weiter)

Du kannst doch bereits einen Taster erfolgreich abfragen, oder?

Was hindert Dich daran, einen zweiten Taster genau so abzufragen?

  1. Ausgabe des 2.ten Taster nur zum Terminal
  2. mittels des 2.ten Taster irgendwas umschalten
  3. die Funktion ansteuern, Die Du wirklich haben willst

Zur Unterscheidung zwischen Blinken und Faden genügte ein boolean (zwei Zustände).
Wenn Du noch Dauerlicht haben willst, wären wir bei Drei, byte wäre mein Favorit - bis 256 Zustände - so Viele werden Es wohl nicht werden.

Wo liegen Deine Probleme derzeit?

MfG