added class Pump

This commit is contained in:
2023-02-15 18:25:59 +01:00
parent 41efce51d5
commit bd699cd238
2 changed files with 60 additions and 16 deletions
+43 -11
View File
@@ -19,47 +19,79 @@ void Pump::loop() {
this->calculatePressure(); this->calculatePressure();
this->calculateFlow(); this->calculateFlow();
this->checkErrors(); this->checkErrors();
this->controlPump();
} }
bool Pump::switchPump(bool state) { bool Pump::switchPump(bool state) {
if (this->error != Error::None) if (this->currentStatus == Status::Failure)
return false;
if (state && this->currentStatus == Status::Standby)
return false; return false;
if (state) if (state)
this->pumpRunningStart = millis(); this->currentStatus = Status::On;
else
digitalWrite(this->pumpPin, state); this->currentStatus = Status::Off;
return true; return true;
} }
uint32_t Pump::getPumpRunningTime() { uint32_t Pump::getPumpRunningTime() {
if (pumpState) if (this->currentStatus == Status::On)
return millis() - this->pumpRunningStart; return millis() - this->pumpRunningStart;
return 0; return 0;
} }
void Pump::calculatePressure() { void Pump::calculatePressure() {
uint16_t pressure;
uint16_t rawValue = analogRead(this->pressurePin); uint16_t rawValue = analogRead(this->pressurePin);
if (rawValue < 104) if (rawValue < 104)
pressure = 0; this->pressure = 0;
else if (rawValue > 922) else if (rawValue > 922)
pressure = 550; this->pressure = 550;
else else
pressure = map(rawValue, 104, 922, 0, 550); this->pressure = map(rawValue, 104, 922, 0, 550);
//TODO: wenn pumpe lange an und druck hoch dann aus //TODO: Error checking
} }
void Pump::calculateFlow() { void Pump::calculateFlow() {
//TODO: Error checking
} }
void Pump::checkErrors() { void Pump::checkErrors() {
if (this->error == Error::None) if (this->error == Error::None)
return; return;
if (this->error )
}
void Pump::controlPump() {
if (this->lastStatus == this->currentStatus)
return;
this->lastStatus = this->currentStatus;
switch (this->currentStatus) {
case Status::Off :
digitalWrite(this->pumpPin, LOW);
break;
case Status::On :
digitalWrite(this->pumpPin, HIGH);
this->pumpRunningStart = millis();
break;
case Status::Standby :
;
break;
case Status::Failure :
digitalWrite(this->pumpPin, LOW); digitalWrite(this->pumpPin, LOW);
if (this->errorFunction) if (this->errorFunction)
this->errorFunction(this->error); this->errorFunction(this->error);
break;
default:
break;
}
} }
+14 -2
View File
@@ -11,6 +11,14 @@ class Pump {
LowFlow, LowFlow,
Both Both
}; };
enum Status : uint8_t {
Off,
On,
Standby,
Failure
};
typedef void (*ErrorFunction)(Error); typedef void (*ErrorFunction)(Error);
Pump(uint8_t pumpPin, uint8_t pressurePin, uint8_t flowPin); Pump(uint8_t pumpPin, uint8_t pressurePin, uint8_t flowPin);
@@ -29,18 +37,22 @@ class Pump {
void calculatePressure(); void calculatePressure();
void calculateFlow(); void calculateFlow();
void checkErrors(); void checkErrors();
void controlPump();
void setStatus(Status status);
Status lastStatus = Status::Off;
Status currentStatus = Status::Off;
Error error = Error::None; Error error = Error::None;
ErrorFunction errorFunction = nullptr; ErrorFunction errorFunction = nullptr;
bool pumpState = false;
uint8_t pumpPin; uint8_t pumpPin;
uint8_t pressurePin; uint8_t pressurePin;
uint8_t flowPin; uint8_t flowPin;
uint8_t delayLoopMs = 20; uint8_t delayLoopMs = 20;
uint16_t flowCounter = 0; uint16_t flowCounter = 0;
uint16_t pressure = 0;
uint32_t lastMillisLoop = 0; uint32_t lastMillisLoop = 0;
uint32_t lastPressureCalculation = 0; uint32_t lastPressureCalculation = 0;