49 lines
1.2 KiB
C++
49 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#include <Arduino.h>
|
|
|
|
|
|
class Pump {
|
|
public:
|
|
enum Error : uint8_t {
|
|
None,
|
|
HighPressure,
|
|
LowFlow,
|
|
Both
|
|
};
|
|
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();
|
|
|
|
Error error = Error::None;
|
|
ErrorFunction errorFunction = nullptr;
|
|
|
|
bool pumpState = false;
|
|
|
|
uint8_t pumpPin;
|
|
uint8_t pressurePin;
|
|
uint8_t flowPin;
|
|
uint8_t delayLoopMs = 20;
|
|
|
|
uint16_t flowCounter = 0;
|
|
|
|
uint32_t lastMillisLoop = 0;
|
|
uint32_t lastPressureCalculation = 0;
|
|
uint32_t lastFlowCalculation = 0;
|
|
uint32_t pumpRunningStart = 0;
|
|
}; |