while schleife vorzeitig abbrechen

Hallo ich möchte wie man im Titel schon lesen kann eine while schleife vorzeitig abbrechen. Ich habe ein Inferrot sensor angebaut und wenn ich auf eine Taste drücke sollen die LED's nach der Reihe ablaufen und das die ganze Zeit und wenn ich wieder auf die gleiche Taste soll es beendet werden. Ich weiß aber nicht wie.

bool i = false;

case 0xFF5AA5: Serial.println("6");
   
  do{
  digitalWrite(2,HIGH);
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
  digitalWrite(5,LOW);
    delay(500);
  digitalWrite(2,LOW);
  digitalWrite(3,HIGH);
  digitalWrite(4,LOW);
  digitalWrite(5,LOW);
    delay(500);
  digitalWrite(2,LOW);
  digitalWrite(3,LOW);
  digitalWrite(4,HIGH);
  digitalWrite(5,LOW);
    delay(500);
  digitalWrite(2,LOW);
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
  digitalWrite(5,HIGH);
    delay(500);
   digitalWrite(2,LOW);
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
  digitalWrite(5,LOW);

 
  }
  while(i == false);
    
   
  break;

Könntet ihr es verständlich erklären bitte da ich noch ein Anfänger bin.

Danke im voraus

Das wird mit delay() im Code nicht funktionieren.
Während Dein Code abläuft wird er durch delay blockiert.
Versuche es mit einer "if" Abfrage.
Schau dir "Blink without delay()" an.

Stefan

Hans_M:
Hallo ich möchte wie man im Titel schon lesen kann eine while schleife vorzeitig abbrechen.

Wofür brauchst Du eine While-Schleife? Du hast doch schon eine große Schleife - loop(). Die kommt immer wieder dran.
Dann merkst Du Dir, ob Du gerade laufen sollst oder nicht in einer Statusvariable (z.B. boolean imLauf = false).
Der erste Tastendruck setzt sie auf true, der nächste aif false.

Wie StefanBoth schon schrieb, dann noch ohne delay arbeiten (in der Zeit wird der Taster nicht abgefragt) und dann kann das was werden.

Du willst ja mit Sicherheit nicht nach dem 2. Tastendruck bis zum Reset nix mehr tun oder?

Gruß Tommy