switched to mqtt, added class valve
This commit is contained in:
+5
-5
@@ -51,7 +51,7 @@ void Pump::loop() {
|
||||
}
|
||||
}
|
||||
|
||||
void Pump::activate(uint32_t duration = 0) {
|
||||
void Pump::activate(uint32_t duration) {
|
||||
this->startTime = millis();
|
||||
if (duration) {
|
||||
this->state = State::Timer;
|
||||
@@ -72,15 +72,15 @@ void Pump::clearError() {
|
||||
}
|
||||
|
||||
uint16_t Pump::getPressure() {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint16_t Pump::getRunningTime() {
|
||||
|
||||
uint32_t Pump::getRunningTime() {
|
||||
return millis() -this->startTime;
|
||||
}
|
||||
|
||||
uint16_t Pump::getFlow() {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Pump::checkSensors() {
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ class Pump {
|
||||
void clearError();
|
||||
|
||||
uint16_t getPressure();
|
||||
uint16_t getRunningTime();
|
||||
uint32_t getRunningTime();
|
||||
uint16_t getFlow();
|
||||
|
||||
State getState() { return this->state; }
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
#include "valve.h"
|
||||
|
||||
Valve::Valve() {
|
||||
|
||||
}
|
||||
|
||||
void Valve::loop() {
|
||||
if (millis() - this->loopLastMillis < this->loopDelay)
|
||||
return;
|
||||
this->loopLastMillis = millis();
|
||||
|
||||
for (uint8_t i = 0; i < this->valveCount; i++) {
|
||||
uint8_t minutesOn = (millis() - this->valves[i].startTime) / 1000;
|
||||
if (minutesOn >= this->valves[i].duration)
|
||||
this->close(i);
|
||||
}
|
||||
}
|
||||
|
||||
void Valve::addShiftRegister(ShiftRegister *shiftRegister) {
|
||||
this->shiftRegister = shiftRegister;
|
||||
}
|
||||
|
||||
void Valve::add(uint8_t pinNum, bool shiftRegister) {
|
||||
if (this->valveCount == MAX_VALVES)
|
||||
return;
|
||||
|
||||
ValveData newValve;
|
||||
newValve.pin = pinNum;
|
||||
newValve.shiftRegister = shiftRegister;
|
||||
this->valves[this->valveCount] = newValve;
|
||||
this->valveCount++;
|
||||
}
|
||||
|
||||
void Valve::open(uint8_t valveNumber, uint8_t minutes) {
|
||||
if (valveNumber >= this->valveCount)
|
||||
return;
|
||||
|
||||
this->valves[valveNumber].duration = minutes;
|
||||
this->valves[valveNumber].startTime = millis();
|
||||
this->setValve(valveNumber, true);
|
||||
}
|
||||
|
||||
void Valve::close(uint8_t valveNumber) {
|
||||
if (valveNumber >= this->valveCount)
|
||||
return;
|
||||
|
||||
this->valves[valveNumber].duration = 0;
|
||||
this->setValve(valveNumber, false);
|
||||
}
|
||||
|
||||
void Valve::closeAll() {
|
||||
for (uint8_t i = 0; i < this->valveCount; i++) {
|
||||
this->valves[i].duration = 0;
|
||||
this->setValve(i, false);
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t Valve::getNumOfOpen() {
|
||||
uint8_t res = 0;
|
||||
for (uint8_t i = 0; i < this->valveCount; i++)
|
||||
if (this->valves[i].duration)
|
||||
res++;
|
||||
return res;
|
||||
}
|
||||
|
||||
uint8_t Valve::getTimeLeft(uint8_t valveNumber) {
|
||||
if (valveNumber >= this->valveCount)
|
||||
return -1;
|
||||
|
||||
uint32_t millisOn = millis() - this->valves[valveNumber].startTime;
|
||||
return this->valves[valveNumber].duration - (millisOn / 1000);
|
||||
}
|
||||
|
||||
void Valve::setValve(uint8_t valveNumber, bool state) {
|
||||
if (this->valves[valveNumber].shiftRegister && this->shiftRegister)
|
||||
this->shiftRegister->writePin(this->valves[valveNumber].pin, state);
|
||||
else
|
||||
digitalWrite(this->valves[valveNumber].pin, state);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
#pragma once
|
||||
|
||||
#include <shiftregister.h>
|
||||
|
||||
#define MAX_VALVES 16
|
||||
|
||||
class Valve {
|
||||
public:
|
||||
struct ValveData {
|
||||
uint8_t pin;
|
||||
bool shiftRegister;
|
||||
uint8_t duration;
|
||||
uint32_t startTime;
|
||||
};
|
||||
|
||||
Valve();
|
||||
|
||||
void loop();
|
||||
|
||||
void addShiftRegister(ShiftRegister *shiftRegister);
|
||||
void add(uint8_t pinNum, bool shiftRegister);
|
||||
|
||||
void open(uint8_t valveNumber, uint8_t minutes);
|
||||
void close(uint8_t valveNumber);
|
||||
void closeAll();
|
||||
|
||||
uint8_t getNumOfOpen();
|
||||
uint8_t getTimeLeft(uint8_t valveNumber);
|
||||
|
||||
|
||||
private:
|
||||
void setValve(uint8_t valveNumber, bool state);
|
||||
|
||||
ShiftRegister* shiftRegister = nullptr;
|
||||
|
||||
ValveData valves[MAX_VALVES];
|
||||
uint8_t valveCount = 0;
|
||||
uint16_t loopDelay = 1000;
|
||||
uint32_t loopLastMillis = 0;
|
||||
};
|
||||
Reference in New Issue
Block a user