Anfängerbraucht Hilfe

Ich habe folgendes Programmiert:

 int LED=9;
 int Helligkeit=0;     // Pulsweite --> Beeinflusst die Helligkeit:
 int Stufe=5;           // Änderung der Pulsweite:
 int heller=2;          //Zum Konfigurieren der Taster:
 int dunkler=4;
 int Ein=0;

void setup() { 

 pinMode(LED, OUTPUT);
 pinMode(heller, INPUT);
 pinMode(dunkler, INPUT);

}

void loop() {

 //LED Ausschalten
 if(Ein=0){
   analogWrite(LED, 0);
   delay(100);
   Ein=1;
 }
 
//Einschalten:
 if(digitalRead(7)==HIGH&&Ein==0){
   Ein=1;
   delay(100);
 }
 //Ausschalten:
 if(digitalRead(7)==HIGH&&Ein==1){
   Ein=0;
   delay(100);
 }

  
 while(Ein==1){    
    
       analogWrite(LED, Helligkeit);
        //verringern der Lechtstärke:
      if(digitalRead(dunkler)==HIGH&&Helligkeit>=5)  {
       Helligkeit=Helligkeit-Stufe;
       delay(50);
      }
      
       //erhöhen der Lichtstärke:
      if(digitalRead(heller)==HIGH&&Helligkeit<=250)  {
       Helligkeit=Helligkeit+Stufe;
       delay(50);
       }
 }
}

Das Einschalten und Dimmen der angeschlossenen LED funktioniert auch. Aber die LED soll wieder mit Ausgeschaltet werden über den gleichen Taster, wie auch eingeschaltet wird. Damit der Taster entprellt wird habe ich die Wartezeit eingebaut.
Auf die Verbesserungsvorschläge bin ich schon gespannt und möchte mich im vorhinein schon mal herzlich für die Hilfe Bedanken

if(Ein=0) Versuch mal "==".

Leider liegt es auch nicht daran.
Es lässt sich leider immer noch nicht Ausschalten.

Meiner Verständnis nach müsste es an folgendem Teil scheitern:
//Ausschalten:
if(digitalRead(7)==HIGH&&Ein==1){
Ein=0;
delay(100);
}

Denn "Ein" lässt sich nicht wieder auf 0 setzten.

Du hast eine
while(Ein==1){ ..}
Schleife in der Ein nie verändert wird, also nie abgebrochen wird.
Der Programmablauf ist:
1 mal

 if(Ein=0){
   analogWrite(LED, 0);
   delay(100);
   Ein=1;
 }

dann endlos

while(Ein==1){    
   
       analogWrite(LED, Helligkeit);
        //verringern der Lechtstärke:
      if(digitalRead(dunkler)==HIGH&&Helligkeit>=5)  {
       Helligkeit=Helligkeit-Stufe;
       delay(50);
      }
     
       //erhöhen der Lichtstärke:
      if(digitalRead(heller)==HIGH&&Helligkeit<=250)  {
       Helligkeit=Helligkeit+Stufe;
       delay(50);
       }
 }

Grüße Uwe

Vielen Dank für die Hilfe,
Ich habe nun den Code etwas überarbeitet, aber immer noch keinen Erfolg.
Die LED lässt sich erst steuern sobald ich das Erste mal den Taster für ein taste. Danach lässt sich die LED aber nicht mehr mit dem gleichen Taster ausschalten. Die LED lässt sich weiterhin steuern. Daher habe ich die Annahme, dass ich weiterhin in der "while-Schleife" bin.

 int LED=9;
 int Helligkeit=0;     // Pulsweite --> Beeinflusst die Helligkeit:
 int Stufe=5;           // Änderung der Pulsweite:
 int heller=2;          //Zum Konfigurieren der Taster:
 int dunkler=4;
 int Ein=0;

void setup() { 

 pinMode(LED, OUTPUT);
 pinMode(heller, INPUT);
 pinMode(dunkler, INPUT);
 Serial.begin(9600);

}

void loop() {


//Ausschalten:
 if(digitalRead(7)==HIGH&&Ein==1){
   Ein=0;
   delay(100);
 }
 
//Einschalten:
 if(digitalRead(7)==HIGH&&Ein==0){
   Ein=1;
   delay(100);
 }

 //LED Ausschalten
 if(Ein==0){
   analogWrite(LED,0);
   delay(100);
 }
  
 while(Ein==1){    
    
       analogWrite(LED, Helligkeit);
        //verringern der Lechtstärke:
      if(digitalRead(dunkler)==HIGH&&Helligkeit>=5)  {
       Helligkeit=Helligkeit-Stufe;
       delay(50);
      }
      
       //erhöhen der Lichtstärke:
      if(digitalRead(heller)==HIGH&&Helligkeit<=250)  {
       Helligkeit=Helligkeit+Stufe;
       delay(50);
       }
 }
}

Problem 1: delay
2: while ohne Ausstieg

was while macht, macht doch schon der loop

Das ist das gleiche. Du veränderst Ein in der while Schleife nie.

Generell brauchst man die auch nicht. Du hast schon mit loop() eine Schleife.

Vielen Dank für die Hilfe.
Nun funktioniert es. Die Ausschaltbedingung ist jetzt in der While-Schleife mit einem Break (weniger Arbeit).
Die while-schleife hatte ich ursprünglich genommen um die Ein und Ausschaltbedingungen vom steuern zu trennen.

Die while-schleife hatte ich ursprünglich genommen um die Ein und Ausschaltbedingungen vom steuern zu trennen.

Verstehe ich eventuell nicht, oder wenn doch, ist das genau dein Problem.

While Schleifen sind eigentlich immer schlecht, dein Code ist ein gutes Beispiel, warum.

Alles ist zu irgend etwas nutze, und sei es als abschreckendes Beispiel :stuck_out_tongue: