Zwei Schalter / 1 LED (AN/AUS & Gedimmt)

Hallo zusammen,
wie der Titel schon sagt, ich versuche folgenden Code umzubauen,
dass ich mit dem einen Taster meine LED an/aus schalten kann und mit dem zweiten Taster auf einen Wert dimmen kann.
Leider hatte ich bislang nur Fehlschläge.
Das an/aus kapiere ich nur irgendwie komme ich beim Dimmen nicht weiter.
Meine Tests hatten schon ergeben, dass ich statt “HIGH” und “LOW” auch einen Zahlenwert für die Helligkeit angeben kann.
Leider fehlt mehr der Ansatz, wo ich bei Taster 2 diesen Wert einstellen kann.
Ich bekomme immer nur an/aus hin.
Könnt Ihr mir da weiter helfen?

Danke und Gruß,
Chris

//lib 
#include <Bounce2.h>

//variablen deklarieren 
#define taster_1 8  //PIN 8 (Digital) AN
#define taster_2 7  //PIN 7 (Digital) AUS
#define ausgang  6 //PIN 6 onboard led zum testen
int t1_old = 0;
int t2_old = 0;

//bounce instancieren
Bounce debouncer_t1 = Bounce();
Bounce debouncer_t2 = Bounce();

void setup() {
  
  Serial.begin(9600);
  
  pinMode(taster_1, INPUT);     //Taster 1
  pinMode(taster_2, INPUT);     //Taster 2
    
  pinMode(ausgang,OUTPUT);      //Relay Ausgang
  digitalWrite(ausgang,HIGH);   //Default Wert nach PowerOn


//debounce
  debouncer_t1.attach(taster_1);
  debouncer_t1.interval(5);
  debouncer_t2.attach(taster_2);
  debouncer_t2.interval(10);

}

// the loop
void loop() {
 //delay(5000);       //delay zum debugen 
 debouncer_t1.update();
 debouncer_t2.update();
 int t1_stat = debouncer_t1.read();
 int t2_stat = debouncer_t2.read();
 int ausg_stat = digitalRead(ausgang);
 //get informations
 Serial.println("    ");
 Serial.print("ausgang= ");
 Serial.println(ausg_stat);
 Serial.print("taster1u2= ");
 Serial.print(t1_stat );
 Serial.println(t2_stat);


 //Zustände des Ausgang (zu Relay) behandeln
 switch (ausg_stat){
  case HIGH:                                           //LICHT IST EIN
   Serial.println("Licht ist an");                    
     if ((t1_stat == HIGH) && (t1_old != t1_stat)){    //Taster1 - ausschalten
       digitalWrite(ausgang,LOW);
       t1_old = HIGH;
     }
     else{
       if ((t1_stat == LOW) && (t1_old = HIGH)){       //Taster1 - do nothing
         t1_old = LOW;
       }
     }
     if ((t2_stat == HIGH) && (t2_old != t2_stat)){    //Taster2 - ausschalten
       digitalWrite(ausgang,LOW);
       t2_old = HIGH;
     }
     else{
       if ((t2_stat == LOW) && (t2_old = HIGH)){       //Taster2 - do nothing
         t2_old = LOW;
       }
     }
     //delay(1000);
     break;
  case LOW:                                            //LICHT IST AUS
   Serial.println("Licht ist aus");
    if ((t1_stat == HIGH) && (t1_old != t1_stat)){     //Taster1 - einschalten
       digitalWrite(ausgang,HIGH);
       t1_old = HIGH;
    }
    else{
     if ((t1_stat == LOW) && (t1_old = HIGH)){        //Taster1 - do nothing
         t1_old = LOW;
       }
    }
     if ((t2_stat == HIGH) && (t2_old != t2_stat)){     //Taster2 - einschalten
       digitalWrite(ausgang,HIGH);
       t2_old = HIGH;
    }
    else{
     if ((t2_stat == LOW) && (t2_old = HIGH)){        //Taster2 - do nothing
         t2_old = LOW;
       }
    }
     //delay(1000);
     break;
  default:
  Serial.println("nothing to do and PANIC");
  //delay(1000);
  break;
 }
 //delay(1000);
}

Hi

Du brauchst einen PWM-Ausgang - Die mit dem ~ Zeichen.
Dort kannst Du mit analogWrite(Pin-Nummer,255); ebenfalls ein 'voll an' und mit analogWrite(Pin-Nummer,0); ein 'voll aus' realisieren.
Zwischenwerte ergeben ... Zwischenwerte :wink:
Bei 127 hättest Du 50% ON/OFF - der Wertebereich ist hier leider nur 8 Bit breit, also 0...255.

Du musst quasi bei AN/AUS nur einen Merker setzen, ob die LED leuchten darf, oder nicht.
Und bei dem 2.ten Taster, den Helligkeitswert hochzählen/runterzählen/whatever.
Außerhalb der Abfragen hast Du eine IF, Die prüft, ob

  • die LED AUS sein soll, aber noch AN ist -> analogWrite 0, 'AUS' merken
  • die LED AN sein soll, aber noch AUS ist -> analogWrite auf den Dimmwert und 'AN' merken
  • die LED AN sein soll, AN ist aber der Dimmwert sich geändert hat -> analogWrite Dimmwert

MfG