Millis() in Switch Case Problem

Hallo, just nen Moment Zeit gefunden.
Erstmal zum Verstehen würde ich das Switch Case Szenario aufdröseln und lernen wie das genau geschrieben werden muss, damit es funktioniert.

Danach die " Struct" Geschichte und abschliessend den Rest.
...denke mir, so lerne ich drei Varianten richtig schreiben und anzuwenden.

hier Quasi mein Teil 1 im Quote mit anschliessneder Frage:

Doc_Arduino:
Hallo,

du aktualisierst vor jeden Vergleich den Zeitmerker. Wie soll dann der Vergleich jemals wahr werden?
Nachdem der Vergleich gültig wurde zieht man den Zeitmerker nach auf die aktuelle Zeit damit er für den nächsten Vergleich erneut warten kann.

case 1://***** Abfrage HSQ1 *****

if (digitalRead(HSQ1) == HIGH) {
          digitalWrite(Relais_HSQ1, HIGH);
           
          Startzeit1 = millis();
        }
        else if (millis() - Startzeit1 >= 2000) {
          digitalWrite(Relais_HSQ1, LOW);
        }
        break;




ändern in


case 1://***** Abfrage HSQ1 *****
        if (digitalRead(HSQ1) == HIGH) {
          digitalWrite(Relais_HSQ1, HIGH);
        }
        else if (millis() - Startzeit1 >= 2000) {
          Startzeit1 = millis();
          digitalWrite(Relais_HSQ1, LOW);
        }
        break;

MicroBahner:
Nein, das ist nicht das Problem. Er startet die Zeit im if-Zweig, wenn das Relais eingeschaltet wird, und fragt die Zeit im else-Zweig ab. Das wäre schon in Ordnung.
Allerdings steht der else-Zweig auch im case 1. Und wenn der Hall-Sensor inaktiv ist, kommt er da gar nicht mehr hin - kann also das Ablaufen der Zeit gar nicht mehr erkennen. Es ist ziemlich unsinnig , denn case nur bei aktivem Hall-Sensor aufzurufen, und dann im case-Zweig nochmal nach dem Status des Hallsensors verzweigen zu wollen.

...bedeutet für mich, den else if teil komplett hinter der "default:" Anweisung zu schreiben?
btw: Schreibfehler im Case 3 korrigiert.