#pragma once #include class Pump { public: enum State : uint8_t { Off = 0, On = 1, Timer = 2, Standby = 3, clearErrorHelper = 99, PreError = 100, Error = 110, OnStupid = 200 }; Pump(uint8_t pumpPin, uint8_t pressurePin, uint8_t flowPin, uint8_t ledPin); void loop(); void activate(uint32_t duration = 0); void activateWithoutSecurity(); void stop(); void clearError(); uint16_t getPressure() const { return this->pressure; } uint32_t getRunningTime() const; uint32_t getRemainingTime() const; uint16_t getFlow() const { return this->flow; } uint8_t getStatus() const { return (uint8_t) this->state; } State getState() const { return this->state; } private: static const uint8_t delayCheckSensor = 100; static const uint8_t delayReadPressure = 33; static const uint8_t minPressure = 400; static const uint16_t restartPressure = 250; static const uint16_t blinkTime = 1000; static const uint16_t delayReadFlow = 1000; static const uint16_t maxPressure = 620; static const uint16_t maxMaxPressureTime = 10000; static const uint16_t maxPreErrorTime = 40000; void readSensorValues(); bool checkSensorsValues(); void handlePins(bool state); void changeState(State state); void stateTimer(); void stateStandby(); void stateError(); void statePreError(bool checkSensors); State state = State::Off; State lastStatePreError; bool ledState = false; bool timerStandby = false; uint8_t pumpPin; uint8_t pressurePin; uint8_t flowPin; uint8_t ledPin; uint16_t delayTimer = 1000; uint16_t flow; uint16_t pressure; uint32_t startTime; uint32_t duration; uint32_t lastMillisTimer = 0; uint32_t lastMillisCheckSensor = 0; uint32_t lastMillisReadPressure = 0; uint32_t lastMillisReadFlow = 0; uint32_t maxPressureStart = 0; uint32_t preErrorStartTime; };