added class Pump
This commit is contained in:
+43
-11
@@ -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
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user