Hilfe bei Taster mit LED

Hallo ich habe folgendes Problem bei einer Aufgabe:

Es soll mit einer LED ein Sonnenaufgang simuliert werden. Das habe ich auch hinbekommen. Nun soll der der Sonnenaufgang nur funktionieren, wenn ein Taster gedrückt wird. Ich weiß, dass dazu eine while Schleife nötig ist - ich komme da nicht weiter.
Hat jemand einen Tipp für mich.

int ledRot=9;          //Variable: ledRot (an Port 9)
int taster=5;           //taster an Port 5

void setup() {        //
  pinMode(ledRot, OUTPUT);    // ledRot wird auf Ausgang gesetzt 
pinMode (taster, INPUT_PULLUP);
}
void loop() {

while(taster==0){
  for (int i=0; i<255; i=i+1){   //i ist am Anfang 0, mit jedem Durchlauf wird i um 1 größer (+ 1) bis i 255 erreicht. Die Zahl (der Wert von i) bestimmt die Helligkeit der LED
    analogWrite(ledRot, i);     //der Wert von i wird an die LED übergeben
    delay(100);                 // 100ms Pause
}
 //delay(2000);                  
}
}

Danke für eure Hilfe

Ich weiß, dass dazu eine while Schleife nötig ist

Das dürfte ein Irrtum sein!

Ob eine Schleife da nützlich oder schädlich ist, steht auf einem ganz anderen Blatt!

int taster=5;           //taster an Port 5

while(taster==0)

Da taster immer 5 ist, wird 5==0 nie true und damit die Schleife nie durchlaufen.

Wieso while-Schleife? Du hast doch loop.

Gibt es jetzt vermehrt Projekthausaufgaben?

Gruß Tommy

combie:
Das dürfte ein Irrtum sein!

Ob eine Schleife da nützlich oder schädlich ist, steht auf einem ganz anderen Blatt!

Da taster immer 5 ist, wird 5==0 nie true und damit die Schleife nie durchlaufen.

Danke für den Tipp, aber jetzt beginnt der Sonnenaufgang sofort und der Taster hat keinerlei Einfluss....

und der Taster hat keinerlei Einfluss....

Klar, da er nie ausgewertet wird!

Tipp: digitalRead()

Danke für eure Hilfe, ich habe es jetzt soweit hinbekommen, dass der der Sonnenaufgang au Taster-Druck startet. Er läuft dann aber durch auch wenn man den Taster wieder loslässt. Das liegt wohl an der while Schleife die vollständig durchlaufen wird. In der Aufgabe steht aber wir sollen es mit einer while Schleife lösen.....

int ledRot=9;          //Variable: ledRot (an Port 9)
int taster=5;           //taster an Port 5

void setup() {        //
pinMode(ledRot, OUTPUT);    // ledRot wird auf Ausgang gesetzt 
pinMode (taster, INPUT_PULLUP); //Taster 
}
void loop() {

while(digitalRead(taster)==0){	//Wenn der Taster den Wert Null hat, dann beginnt die while-Schleife
  for (int i=0; i<255; i=i+1){   //i ist am Anfang 0, mit jedem Durchlauf wird i um 1 größer (+ 1) bis i 255 erreicht. Die Zahl (der Wert von i) bestimmt die Helligkeit der LED
    analogWrite(ledRot, i);     //der Wert von i wird an die LED übergeben
    delay(100);                 // 100ms Pause
}
 //delay(2000);                  
}
}

In der Aufgabe steht aber wir sollen es mit einer while Schleife lösen.....

Tja, dann musst du das auch so tun!

Das liegt wohl an der while Schleife die vollständig durchlaufen wird

Nein, dein Problem ist die for-Schleife, die vollständig durchlaufen wird.
Mach doch aus den zwei Schleifen eine...

Tip (wenn es denn unbedingt eine while Schleife sein soll): for ist nur eine andere Schreibweise statt while.

sorry ich komme trotz des Tipps nicht weiter
Ich hänge wohl auch in einer Gedanken - Schleife fest

Wie schon geschrieben wurde, braucht man dafür eigentlich keine eigene Schleife, weil loop ja schon eine ist.
Wenn Du das aber mit einer (while/for-) Schleife machen musst, dann musst Du den Taster innerhalb deiner for-Schleife auch abfragen, und die Schleife abbrechen, wenn er nicht mehr gedrückt ist:

if ( digitalRead(taster)!=0 ) break;

hanneswave:
In der Aufgabe steht aber wir sollen es mit einer while Schleife lösen.....

schreibe den exakten Wortlaut der Aufgabe hier rein. Weil "wir sollen es mit einer while Schleife lösen" ist nur ein soll. Das heißt nicht du musst.

Außerdem kann man solche sinnfreien Vorgaben auch so lösen:

while (1==2)
{
// mandatory while
}

und schon ist ein while im Sketch.

MicroBahner:
Wie schon geschrieben wurde, braucht man dafür eigentlich keine eigene Schleife, weil loop ja schon eine ist.
Wenn Du das aber mit einer (while/for-) Schleife machen musst, dann musst Du den Taster innerhalb deiner for-Schleife auch abfragen, und die Schleife abbrechen, wenn er nicht mehr gedrückt ist:

if ( digitalRead(taster)!=0 ) break;

Danke das hat mir sehr geholfen

Aus demforeinwhilemachen würde ich z.B. so

int i=0;
while(digitalRead(taster)==LOW && i < 255){  // Solange der Taster gedrückt und das Ende nicht erreicht...
    analogWrite(ledRot, i++);     // ... wird der Wert von i an die LED übergeben und dann erhöht
    delay(100);                         // 100ms * 255 = max 25 sec Fade-Gesamtdauer
}

Nachtrag:
Allerdings wäre es natürlich noch besser ohne while, weil loop ja schon eine Schleife ist.

Vielen Dank für die 2. Lösungsmöglichkeit, die funktioniert auch sehr gut.