Anfängerfrage zur pulsierenden LED

Hallo zusammen,
der Sketch der pulsierenden LED in den Anfängertutorials ist den meisten wohl bekannt. Den Ablauf des Sketches habe ich verstanden und habe mal versucht ihn ein wenig zu verändern. Mein Ziel war es, nach einem pulsierenden Blinken eine Pause einzufügen. Ich habe gedacht, dass eine while-Schleife hier möglich sein sollte. Ich erkenne meine Denkfehler hier in dem Sketch nicht:

int LED=0;
int helligkeit= 10;
int fadeschritte= 5;

void setup()

{
pinMode(LED, OUTPUT);
}

void loop()
{
while (helligkeit>5)
{
analogWrite(LED, helligkeit);
helligkeit = helligkeit + fadeschritte;
delay(25);
if (helligkeit == 10 || helligkeit == 255)
{
fadeschritte = -fadeschritte ;
}
digitalWrite(LED, LOW);
delay(300);

}
}

Wenn ich das richtig verstanden habe, dann wird die LED mit einem Wert von 10 gestartet. und die while Bedingung würde den loop überspringen,wenn der Wert unter 5 geht. Da die LED mit 10 startet, der Wert immer um 5 steigt, bei 255 zurückwandert, müsste er irgendwann unter 5 kommen und dann die Schleife überspringen. Klappt aber nicht.

Ich würde mich freuen, wenn mir jemand einen Tipp geben könnte um wieder in die Spur zu kommen.

Schöne Grüße und vielen Dank im Voraus
Spruenki

Die Helligkeit kommt nie unter 5, da bei 10 schon wieder auf ‘heller werden’ umgeschaltet wird:

 if (helligkeit == 10 || helligkeit == 255)
{
 fadeschritte = -fadeschritte ;
}

Und Du musst deine Pause natürlich auch außerhalb der while-Schleife setzen.

P.S. setze deinen Code bitte in code-Tags ( das </> oben links im Beitragseditor ).

P.P.S. und eigentlich brauchst Du auch keine while Schleife dafür. loop() ist ja schon deine Schleife. Die Pause fügst Du dann ein, wenn die Helligkeit den niedrigsten Wert hat.

Okay, das habe ich größtenteils verstanden:

int LED=0;
int helligkeit= 10; 
int fadeschritte= 5;

void setup()

{
pinMode(LED, OUTPUT);
}

void loop()
{
 analogWrite(LED, helligkeit);                             //Hier schalte ich die LED auf den Wert 10

{
 while (helligkeit>5)                                          //Solange Helligkeit größer als 5 ist, pulsiert die LED
{
 analogWrite(LED, helligkeit);
 helligkeit = helligkeit + fadeschritte;
 delay(25);
 if (helligkeit == 0 || helligkeit == 255)              //durch helligkeit =0 geht der Wert hier unter 5, über
{                                                                      //while geht das Programm einen Schrit weiter
 fadeschritte = -fadeschritte ;
} 
 

}
digitalWrite(LED, LOW);                                     //einmal komplett aussschalten
delay(300);                                                       // warten und wieder von vorne ABER:
}
}

Die LED pulsiert einmal und bleibt dann aus. Sie sollte aber doch nach der Pause erneut in den Loop, oder?

Hallo,
Du unterliegt einem Irrtum while bildet eine Schleife für betreffenden Klammern , es hat nichts mit Weile zu tun .
Im einfachsten Fall benutzt du ein If und machst ein delay für den Fall.

Heinz

Die Abbruchbedingung für das while ist ja auch beim nächsten loop-Durchlauf noch erfüllt. Du musst sie also wieder auf die Ausgangswerte setzen - oder ganz auf das while verzichten.

Und rück mal richtig ein ( ctrl-T hilft ).