Files
Bewaesserung-Arduino/lib/Pump/pump.h
T
2023-07-07 14:59:04 +02:00

77 lines
2.2 KiB
C++

#pragma once
#include <Arduino.h>
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 = 200;
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 = 30000;
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;
};