Hilfe bei einer simplen Pumpensteuerung

#include <CombiePin.h>
#include <CombieTimer.h>

Combie::Pin::InputPin<3>        schwimmerschalterOben;
Combie::Pin::InputPin<2>        schwimmerschalterUnten;
Combie::Pin::OutputPin<8>       pumpe;
Combie::Pin::OutputPin<9>       leuchtMelderStoerung;
Combie::Timer::RisingEdgeTimer  pumpenTimeOut(900000UL); 

enum Stoerung:byte {AllesOk=0,Zeitueberschreitung,Sensorfehler};

const bool ein = true;
const bool aus = false;

Stoerung stoerung          = Stoerung::AllesOk; // // hilfsvariable Stoerungsmerker
bool pumpAnforderung = aus;

void setup() 
{
  Serial.begin(9600);
  Serial.println("Start");
  schwimmerschalterOben.initPullup();
  schwimmerschalterUnten.initPullup();
  leuchtMelderStoerung.init();
  pumpe.init();
}

void loop() 
{
  leuchtMelderStoerung = stoerung; // bei Stoerung LED entzuenden
  
  // harte Fehlerbehandlung
  if(stoerung)
  {
    pumpe = aus;
    return;
  }

  // baue Anforderung zum Pumpen
  if(!schwimmerschalterUnten)
  {
        pumpAnforderung = ein;
  }

  // Pumpanforderung konsumieren
  if(schwimmerschalterOben)
  {
     pumpAnforderung = aus;
  }

  // baue Sensor error
  if(schwimmerschalterOben && !schwimmerschalterUnten)
  {
    stoerung = Stoerung::Sensorfehler;
    Serial.println("Sensorfehler");
  }
  
  // baue Zeitueberschreitung error
  if(pumpenTimeOut(pumpAnforderung))
  {
    stoerung = Stoerung::Zeitueberschreitung;
    Serial.println("Zeitueberschreitung");
  }

  // Pumpen Abhandlung
  pumpe = pumpAnforderung && !stoerung;
}

ungetestet
Habe keine Pumpe und weiß die Schalterlogik nicht

CombieLib.zip (31.3 KB)