Verlassen einer if schleife nach Tastendruck

Hallo Leute mal eine frage

                      if(tasterstatus == HIGH){

                        digitalWrite(relaisPin, LOW);
                        delay (120000);
                        tasterstatus == LOW;
                        digitalWrite(relaisPin, HIGH);                            
                      }

Wie kann ich nun so lange die Schleife durchlaufen bis ich die Taste nochmals drücke

Muck93:
Hallo Leute mal eine frage

                      if(tasterstatus == HIGH){

digitalWrite(relaisPin, LOW);
                        delay (120000);
                        tasterstatus == LOW;
                        digitalWrite(relaisPin, HIGH);                           
                      }




Wie kann ich nun so lange die Schleife durchlaufen bis ich die Taste nochmals drücke

Damit hier überhaupt etwas funktioniert, musst du erst das delay ersetzen.
Da passiert 120 Sek. nichts außer "warten".

das delay soll ersetzt werden durch den tastendruck als verlassen der schleife

Welche Schleife? Es gibt keine if-Schleifen

Beschreibe lieber mal völlig allgemein was du eigentlich tun willst. Ohne auf die Implementierung einzugehen. Dann kann man eher sagen wie man das lösen kann.

Muck93:
das delay soll ersetzt werden durch den tastendruck als verlassen der schleife

Dann solltest du das mal so umstellen, das wir auch wissen, was genau passieren soll.

Da du eine if-Anweisung (keine Schleife) verwendest, geht das so nicht.
Du müsstest eine while-Schleife dafür verwenden.

Okay
ich bin befinde mich in einer Schleife, die 40 mal durchläuft wird, dabei ist ein Relais geschalten
es soll aber möglich sein
durch Tastendruck, das Relais abzuschalten (eine Pause), und nach wiederholten tastendruck, soll die schleife weitermachen, von dort wo sie unterbrochen wurde

Die Fragestellung erinnert mich an das Verhalten eines T-FlipFlops aus der Digitalelektronik: Kommt am T-Eingang eine negative Takt-Flanke an, schaltet der Q-Ausgang auf HIGH. Kommt irgendwann die nächste negative Takt-Flanke an, geht Q wieder auf LOW. Mehrere T-FlipFlops hintereinander ergäben dann sogar einen Zähler.

In anderen Worten:

Es muß eine Routine geschaffen werden, die eine (entprellte) Taste auf „Loslassen“ prüft und intern ein Status-Bit setzt. Wird diese (entprellte) Taste irgendwann später wiederholt betätigt, wird das interne Flag wieder auf Null gesetzt. Und somit ist das gewünschte Verhalten erreicht.

Das ganze geschieht dann ohne Delay (höchstens vielleicht 10-20 mS für die Überbrückung der Prell-Zeit) und läuft NICHT innerhalb einer (Dauer-) Schleife, was ja alle anderen Aktivitäten blockiert.

              tasterstatus=digitalRead(taster);
                      while(tasterstatus == HIGH){
                        lcd.clear();
                        lcd.setCursor(0,0);
                        lcd.print ("Pause");
                        q=1;
                        delay (2500);
                        while (q=1){
                           tasterstatus=digitalRead(taster);
                           if(tasterstatus== HIGH){
                            q=0;
                            lcd.clear();
                            lcd.setCursor(0,0);
                            lcd.print ("Pause");
                            lcd.setCursor(0,1);
                            lcd.print ("weiter mit Taste");
                            

                           }
                          
                        }
                       delay(1000); 
                            
                      }

Wieso bleib ich als in der Schleife mit while(q=1){....

zwar gibt es ein kurzes blinken am display mehr aber nicht

Lösung:

tasterstatus=digitalRead(taster);
                      if(tasterstatus == HIGH){
                        lcd.clear();
                        lcd.setCursor(0,0);
                        lcd.print ("Pause");
                        q=1;
                        delay (2500);
                        while (q==1){
                           tasterstatus=digitalRead(taster);

                            lcd.setCursor(0,1);
                            lcd.print ("weiter mit Taste");
                           if(tasterstatus== HIGH){
                            q=0;                          
                           }                         
                        }
                       delay(1000); 
                           
                      }

OK, wenn du zufrieden bist.

Wenn du Gemecker erträgst:
Deine Lösung funktioniert, weil die Anzeige "Pause" signalisiert, dass du jetzt den Taster loslassen kannst und der Taster dann für die nächsten 2,5 sec ignoriert wird.

Der Text "weiter mit Taster" könnte etwas flackern, da er mit maximlaer Geschwindigkeit
wiederholt wird, bis du die Taste drückst.

Der Text "weiter mit Taster" bleibt noch eine Sekunde lang stehen, damit du in der Zeit den Finger wieder wegnehmen kannst.

Wenn du den Finger dauernd drauf lässt, hat loop() eine Dauer von 3,5 sec und wechselt dabei zwischen "Pause" und "weiter...".
Wenn du den sketch erweitern willst und zusätzlich noch mehr passieren soll, hast du Pech, weil dein Arduino in delay() oder while Schleifen hängt...

Zum Glück soll hier nichts passieren :smiley:
aber man sieht das flackern nicht :smiley: ist wohl für den display zu schnell :smiley:
war mir aber auch bewusst, aber es funktioniert :smiley: