Millis() in Switch Case Problem

Hallo,

habs mal mit switch case gemacht. Wie schon gesagt, passt nicht zum Problem und verkompliziert die Sache. Problem ist, dass Sensorsignal liegt nicht ständig an. Für switch case muss es das jedoch damit die case gültig werden. Man muss damit switch case zur Endlosschleife machen. Indem es innerhalb die Zustände wechselt. Damit reagiert das Programm nur noch auf die Zeitvergleiche. Deswegen kann man sich das drum herum mit switch case gänzlich einsparen und nur die if Abfragen nutzen zum ausschalten.

Ich nutze switch case vorallendingen mit enum sehr gerne, hier halte ich es jedoch für nicht sinnvoll, weil es nichts einfacher macht. Auch ein speichern des Sensorsignal in der Steuervariablen macht keinen sinn, weil immer der letzte Sensor gewinnt. Kann ich drehen und wenden wie ich möchte. Das ist kein Bsp. zum nachmachen.

#include <Bounce2.h>

const byte HSQ1 = 2;
const byte HSQ2 = 3;
Bounce debouncer1 = Bounce();
Bounce debouncer2 = Bounce();

const byte Relais_HSQ1 = 28;
const byte Relais_HSQ2 = 29;

unsigned long Startzeit1;
unsigned long Startzeit2;

unsigned long global_millis;

enum class state : byte {HSQ1, HSQ2};   // Steuerzustände
state sensor = state::HSQ1;

void setup()
{
  pinMode(HSQ1, INPUT_PULLUP);
  pinMode(HSQ2, INPUT_PULLUP);

  pinMode(Relais_HSQ1, OUTPUT);
  pinMode(Relais_HSQ2, OUTPUT);

  debouncer1.attach(HSQ1); debouncer1.interval(30);
  debouncer2.attach(HSQ2); debouncer2.interval(30);
}


void loop() {

  global_millis = millis();

  byte input = 0;

  debouncer1.update();
  debouncer2.update();

  input = debouncer1.read();
  if ( input == LOW) {
    digitalWrite(Relais_HSQ1, HIGH);
    Startzeit1 = global_millis;
  }

  input = debouncer2.read();
  if ( input == LOW) {
    digitalWrite(Relais_HSQ2, HIGH);
    Startzeit2 = global_millis;
  }

  switch (sensor) {
    case state::HSQ1:
          if (global_millis - Startzeit1 >= 2000) {
            digitalWrite(Relais_HSQ1, LOW);
          }
          sensor = state::HSQ2;
          break;
    case state::HSQ2:
          if (global_millis - Startzeit2 >= 2000) {
            digitalWrite(Relais_HSQ2, LOW);
          }
          sensor = state::HSQ1;
          break;
    default: break;
  }
}