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 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);
}
}
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:
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:
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.