#include #include bool allow; static const uint8_t WasserSensorPin = 14; static const uint8_t DruckSensorPin = 12; static const uint8_t SchuetzPin = 13; Ticker tick; void pumpeSchalten(bool on) { // digitalWrite(4,on); if (allow) { digitalWrite(SchuetzPin, on); Serial.println("pumpe wird geschalten"); } else { Serial.println("Schalten des Schütz gesperrt durch Timeout"); } } ICACHE_RAM_ATTR void DruckschalterInt() { if (digitalRead(DruckSensorPin) == HIGH) { //pumpe einschalten Serial.println("Druck Sensor EIN"); pumpeSchalten(true); } else { //pumpe ausschalten Serial.println("Druck Sensor AUS"); pumpeSchalten(false); } } void WasserSensorCheck() { if (digitalRead(WasserSensorPin) == LOW) { Serial.println("Wasser Sensor AUS"); //kein Wasser dh timer auf 10min stellen allow = false; Serial.println("Schalte pumpe aus"); pumpeSchalten(false); Serial.println("warte 30min"); tick.detach(); tick.once(1800, []() { if (digitalRead(WasserSensorPin)) { allow = true; Serial.println("Einschalten der Pumpe wieder erlaubt."); //pruefen ob drucksensor ein DruckschalterInt(); } }); } else { Serial.println("Wasser Sensor EIN"); } } ICACHE_RAM_ATTR void WasserSensorInt() { WasserSensorCheck(); } void setup() { pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, LOW); pinMode(WasserSensorPin, INPUT); pinMode(DruckSensorPin, INPUT); digitalWrite(SchuetzPin, LOW); //pumpe anfangs sofort abschalten pinMode(SchuetzPin, OUTPUT); Serial.begin(9600); Serial.println("\n\n\n\nstartup of ESP"); //digitalWrite(LED_BUILTIN, LOW); //initial measurement of water state delay(1000); //allow = digitalRead(WasserSensorPin); allow=true; WasserSensorCheck(); DruckschalterInt(); attachInterrupt(digitalPinToInterrupt(DruckSensorPin), DruckschalterInt, CHANGE); attachInterrupt(digitalPinToInterrupt(WasserSensorPin), WasserSensorInt, CHANGE); Serial.println("startup sequence complete!\n"); digitalWrite(LED_BUILTIN, HIGH); } void loop() { }