101 lines
2.3 KiB
C++
101 lines
2.3 KiB
C++
|
#include <Arduino.h>
|
||
|
#include <Ticker.h>
|
||
|
|
||
|
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() {
|
||
|
|
||
|
}
|