#pragma once #include 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; };