#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)