61 lines
1.4 KiB
C++
61 lines
1.4 KiB
C++
#pragma once
|
|
|
|
#include <Arduino.h>
|
|
|
|
|
|
class Pump {
|
|
public:
|
|
enum Error : uint8_t {
|
|
None,
|
|
HighPressure,
|
|
LowFlow,
|
|
Both
|
|
};
|
|
|
|
enum Status : uint8_t {
|
|
Off,
|
|
On,
|
|
Standby,
|
|
Failure
|
|
};
|
|
|
|
typedef void (*ErrorFunction)(Error);
|
|
|
|
Pump(uint8_t pumpPin, uint8_t pressurePin, uint8_t flowPin);
|
|
|
|
void loop();
|
|
void clearError() { this->error = Error::None; }
|
|
bool switchPump(bool state);
|
|
void incrementFlowCounter() { this->flowCounter++; };
|
|
|
|
uint8_t getFlowPin() { return this->flowPin; }
|
|
uint32_t getPumpRunningTime();
|
|
|
|
void setErrorFunction(ErrorFunction ptr) { this->errorFunction = ptr; }
|
|
|
|
private:
|
|
void calculatePressure();
|
|
void calculateFlow();
|
|
void checkErrors();
|
|
void controlPump();
|
|
|
|
void setStatus(Status status);
|
|
|
|
Status lastStatus = Status::Off;
|
|
Status currentStatus = Status::Off;
|
|
Error error = Error::None;
|
|
ErrorFunction errorFunction = nullptr;
|
|
|
|
uint8_t pumpPin;
|
|
uint8_t pressurePin;
|
|
uint8_t flowPin;
|
|
uint8_t delayLoopMs = 20;
|
|
|
|
uint16_t flowCounter = 0;
|
|
uint16_t pressure = 0;
|
|
|
|
uint32_t lastMillisLoop = 0;
|
|
uint32_t lastPressureCalculation = 0;
|
|
uint32_t lastFlowCalculation = 0;
|
|
uint32_t pumpRunningStart = 0;
|
|
}; |