make a lot of things better
This commit is contained in:
+2
-1
@@ -15,5 +15,6 @@
|
|||||||
#define INT_HALL_PIN 2
|
#define INT_HALL_PIN 2
|
||||||
|
|
||||||
#define VALVE_COUNT 12
|
#define VALVE_COUNT 12
|
||||||
|
#define MAX_VALVE_OPEN 3
|
||||||
const uint8_t valvePins[VALVE_COUNT] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
|
const uint8_t valvePins[VALVE_COUNT] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
|
||||||
const char mainTopic[] = "LebennigHuus/Garden/Irrigation";
|
const char mainTopic[] = "LebennigHuus/Garden/Irrigation/Main";
|
||||||
+25
-17
@@ -16,13 +16,14 @@ Pump::Pump(uint8_t pumpPin, uint8_t pressurePin, uint8_t flowPin, uint8_t ledPin
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Pump::loop() {
|
void Pump::loop() {
|
||||||
|
this->readSensorValues();
|
||||||
switch (this->state) {
|
switch (this->state) {
|
||||||
case State::Off :
|
case State::Off :
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case State::On :
|
case State::On :
|
||||||
this->timerStandby = false;
|
this->timerStandby = false;
|
||||||
this->checkSensors();
|
this->checkSensorsValues();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case State::Timer :
|
case State::Timer :
|
||||||
@@ -51,6 +52,10 @@ void Pump::activate(uint32_t duration) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Pump::activateWithoutSecurity() {
|
||||||
|
this->changeState(State::OnStupid);
|
||||||
|
}
|
||||||
|
|
||||||
void Pump::stop() {
|
void Pump::stop() {
|
||||||
this->changeState(State::Off);
|
this->changeState(State::Off);
|
||||||
}
|
}
|
||||||
@@ -62,33 +67,36 @@ void Pump::clearError() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t Pump::getPressure() {
|
uint32_t Pump::getRunningTime() const {
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t Pump::getRunningTime() {
|
|
||||||
if (this->state == State::Off)
|
if (this->state == State::Off)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return (millis() - this->startTime) / 1000;
|
return (millis() - this->startTime) / 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t Pump::getFlow() {
|
uint32_t Pump::getRemainingTime() const {
|
||||||
return 0;
|
if (this->state != State::Timer)
|
||||||
|
return 0;
|
||||||
|
return (this->duration * 60) - ((millis() - this->startTime) / 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t Pump::getStatus() {
|
void Pump::readSensorValues() {
|
||||||
return (uint8_t) this->state;
|
if (millis() - this->lastMillisReadSensor < Pump::delayReadSensor)
|
||||||
|
return;
|
||||||
|
this->lastMillisReadSensor = millis();
|
||||||
|
|
||||||
|
|
||||||
|
//TODO: read pressure
|
||||||
|
this->pressure = 12;
|
||||||
|
//TODO: read flow
|
||||||
|
this->flow = 13;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Pump::checkSensors() {
|
bool Pump::checkSensorsValues() {
|
||||||
if (millis() - this->lastMillisCheckSensor < Pump::delayCheckSensor)
|
if (millis() - this->lastMillisCheckSensor < Pump::delayCheckSensor)
|
||||||
return true;
|
return true;
|
||||||
this->lastMillisCheckSensor = millis();
|
this->lastMillisCheckSensor = millis();
|
||||||
|
|
||||||
//TODO: read pressure
|
|
||||||
//TODO: read flow
|
|
||||||
|
|
||||||
if (this->flow) {
|
if (this->flow) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -161,10 +169,10 @@ void Pump::changeState(State state) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Pump::stateTimer() {
|
void Pump::stateTimer() {
|
||||||
if (!this->checkSensors())
|
if (!this->checkSensorsValues())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (millis() - this->lastMillisTimer < Pump::delayTimer)
|
if (millis() - this->lastMillisTimer < this->delayTimer)
|
||||||
return;
|
return;
|
||||||
this->lastMillisTimer = millis();
|
this->lastMillisTimer = millis();
|
||||||
|
|
||||||
@@ -174,7 +182,7 @@ void Pump::stateTimer() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Pump::stateStandby() {
|
void Pump::stateStandby() {
|
||||||
this->checkSensors();
|
this->checkSensorsValues();
|
||||||
if (this->pressure < Pump::maxPressure / 2) {
|
if (this->pressure < Pump::maxPressure / 2) {
|
||||||
if (this->timerStandby)
|
if (this->timerStandby)
|
||||||
this->changeState(State::Timer);
|
this->changeState(State::Timer);
|
||||||
|
|||||||
+14
-7
@@ -9,6 +9,7 @@ class Pump {
|
|||||||
On = 1,
|
On = 1,
|
||||||
Timer = 2,
|
Timer = 2,
|
||||||
Standby = 3,
|
Standby = 3,
|
||||||
|
clearErrorHelper = 99,
|
||||||
Error = 100,
|
Error = 100,
|
||||||
OnStupid = 200
|
OnStupid = 200
|
||||||
};
|
};
|
||||||
@@ -18,23 +19,27 @@ class Pump {
|
|||||||
void loop();
|
void loop();
|
||||||
|
|
||||||
void activate(uint32_t duration = 0);
|
void activate(uint32_t duration = 0);
|
||||||
|
void activateWithoutSecurity();
|
||||||
void stop();
|
void stop();
|
||||||
void clearError();
|
void clearError();
|
||||||
|
|
||||||
uint16_t getPressure();
|
uint16_t getPressure() const { return this->pressure; }
|
||||||
uint32_t getRunningTime();
|
uint32_t getRunningTime() const;
|
||||||
uint16_t getFlow();
|
uint32_t getRemainingTime() const;
|
||||||
uint8_t getStatus();
|
uint16_t getFlow() const { return this->flow; }
|
||||||
|
uint8_t getStatus() const { return (uint8_t) this->state; }
|
||||||
|
|
||||||
State getState() { return this->state; }
|
State getState() const { return this->state; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static const uint8_t delayCheckSensor = 50;
|
static const uint8_t delayCheckSensor = 100;
|
||||||
|
static const uint8_t delayReadSensor = 33;
|
||||||
static const uint16_t blinkTime = 1000;
|
static const uint16_t blinkTime = 1000;
|
||||||
static const uint16_t maxPressure = 1000;
|
static const uint16_t maxPressure = 1000;
|
||||||
static const uint16_t maxMaxPressureTime = 30000;
|
static const uint16_t maxMaxPressureTime = 30000;
|
||||||
|
|
||||||
bool checkSensors();
|
void readSensorValues();
|
||||||
|
bool checkSensorsValues();
|
||||||
void handlePins(bool state);
|
void handlePins(bool state);
|
||||||
void changeState(State state);
|
void changeState(State state);
|
||||||
void stateTimer();
|
void stateTimer();
|
||||||
@@ -50,6 +55,7 @@ class Pump {
|
|||||||
uint8_t flowPin;
|
uint8_t flowPin;
|
||||||
uint8_t ledPin;
|
uint8_t ledPin;
|
||||||
|
|
||||||
|
uint16_t delayTimer = 1000;
|
||||||
uint16_t flow;
|
uint16_t flow;
|
||||||
uint16_t pressure;
|
uint16_t pressure;
|
||||||
|
|
||||||
@@ -57,5 +63,6 @@ class Pump {
|
|||||||
uint32_t duration;
|
uint32_t duration;
|
||||||
uint32_t lastMillisTimer = 0;
|
uint32_t lastMillisTimer = 0;
|
||||||
uint32_t lastMillisCheckSensor = 0;
|
uint32_t lastMillisCheckSensor = 0;
|
||||||
|
uint32_t lastMillisReadSensor = 0;
|
||||||
uint32_t maxPressureStart = 0;
|
uint32_t maxPressureStart = 0;
|
||||||
};
|
};
|
||||||
+7
-3
@@ -1,7 +1,7 @@
|
|||||||
#include "valve.h"
|
#include "valve.h"
|
||||||
|
|
||||||
Valve::Valve() {
|
Valve::Valve(uint8_t maxOpen) {
|
||||||
|
this->maxOpen = maxOpen;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Valve::loop() {
|
void Valve::loop() {
|
||||||
@@ -37,6 +37,10 @@ void Valve::open(uint8_t valveNumber, uint8_t minutes) {
|
|||||||
if (valveNumber >= this->valveCount)
|
if (valveNumber >= this->valveCount)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (this->getNumOfOpen() >= this->maxOpen) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this->valves[valveNumber].duration = minutes;
|
this->valves[valveNumber].duration = minutes;
|
||||||
this->valves[valveNumber].startTime = millis();
|
this->valves[valveNumber].startTime = millis();
|
||||||
this->setValve(valveNumber, true);
|
this->setValve(valveNumber, true);
|
||||||
@@ -60,7 +64,7 @@ void Valve::closeAll() {
|
|||||||
this->close(i);
|
this->close(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t Valve::getNumOfOpen() {
|
uint8_t Valve::getNumOfOpen() const {
|
||||||
uint8_t res = 0;
|
uint8_t res = 0;
|
||||||
for (uint8_t i = 0; i < this->valveCount; i++)
|
for (uint8_t i = 0; i < this->valveCount; i++)
|
||||||
if (this->valves[i].duration)
|
if (this->valves[i].duration)
|
||||||
|
|||||||
+4
-2
@@ -13,7 +13,7 @@ class Valve {
|
|||||||
uint32_t startTime;
|
uint32_t startTime;
|
||||||
};
|
};
|
||||||
|
|
||||||
Valve();
|
Valve(uint8_t maxOpen);
|
||||||
|
|
||||||
void loop();
|
void loop();
|
||||||
|
|
||||||
@@ -24,7 +24,8 @@ class Valve {
|
|||||||
void close(uint8_t valveNumber);
|
void close(uint8_t valveNumber);
|
||||||
void closeAll();
|
void closeAll();
|
||||||
|
|
||||||
uint8_t getNumOfOpen();
|
uint8_t getNumOfOpen() const;
|
||||||
|
uint8_t getMaxOpen() const { return this->maxOpen; }
|
||||||
uint16_t getTimeLeft(uint8_t valveNumber);
|
uint16_t getTimeLeft(uint8_t valveNumber);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -33,6 +34,7 @@ class Valve {
|
|||||||
ShiftRegister* shiftRegister = nullptr;
|
ShiftRegister* shiftRegister = nullptr;
|
||||||
|
|
||||||
ValveData valves[MAX_VALVES];
|
ValveData valves[MAX_VALVES];
|
||||||
|
uint8_t maxOpen;
|
||||||
uint8_t valveCount = 0;
|
uint8_t valveCount = 0;
|
||||||
uint16_t loopDelay = 1000;
|
uint16_t loopDelay = 1000;
|
||||||
uint32_t loopLastMillis = 0;
|
uint32_t loopLastMillis = 0;
|
||||||
|
|||||||
+10
-3
@@ -33,7 +33,7 @@ const char mqttId[] = "bewaesserungArduino123";
|
|||||||
|
|
||||||
ShiftRegister reg(RCLK_PIN, SRCLK_PIN, SRSER_PIN, 2);
|
ShiftRegister reg(RCLK_PIN, SRCLK_PIN, SRSER_PIN, 2);
|
||||||
Pump pump(SSR_PIN, PRESSURE_PIN, INT_HALL_PIN, STATUS_LED_1_PIN);
|
Pump pump(SSR_PIN, PRESSURE_PIN, INT_HALL_PIN, STATUS_LED_1_PIN);
|
||||||
Valve valves;
|
Valve valves(MAX_VALVE_OPEN);
|
||||||
EthernetClient ethClient;
|
EthernetClient ethClient;
|
||||||
PubSubClient client(ethClient);
|
PubSubClient client(ethClient);
|
||||||
|
|
||||||
@@ -126,7 +126,11 @@ void callback(char* topic, byte* payload, unsigned int length) {
|
|||||||
} else if (doc.containsKey("pump")) {
|
} else if (doc.containsKey("pump")) {
|
||||||
uint8_t mode = doc["pump"]["mode"];
|
uint8_t mode = doc["pump"]["mode"];
|
||||||
uint8_t duration = doc["pump"]["duration"];
|
uint8_t duration = doc["pump"]["duration"];
|
||||||
if (mode)
|
if (mode == Pump::State::OnStupid)
|
||||||
|
pump.activateWithoutSecurity();
|
||||||
|
else if (mode == Pump::State::clearErrorHelper)
|
||||||
|
pump.clearError();
|
||||||
|
else if (mode)
|
||||||
pump.activate(duration);
|
pump.activate(duration);
|
||||||
else
|
else
|
||||||
pump.stop();
|
pump.stop();
|
||||||
@@ -168,6 +172,7 @@ void sendPumpStatus() {
|
|||||||
JsonObject pumpJson = doc.createNestedObject("pump");
|
JsonObject pumpJson = doc.createNestedObject("pump");
|
||||||
pumpJson["status"] = pump.getStatus();
|
pumpJson["status"] = pump.getStatus();
|
||||||
pumpJson["duration"] = pump.getRunningTime();
|
pumpJson["duration"] = pump.getRunningTime();
|
||||||
|
pumpJson["remaining"] = pump.getRemainingTime();
|
||||||
pumpJson["pressure"] = pump.getPressure();
|
pumpJson["pressure"] = pump.getPressure();
|
||||||
pumpJson["flow"] = pump.getFlow();
|
pumpJson["flow"] = pump.getFlow();
|
||||||
|
|
||||||
@@ -183,10 +188,11 @@ void sendValveStatus(uint8_t valveNumber) {
|
|||||||
|
|
||||||
JsonObject valve = doc.createNestedObject("valve");
|
JsonObject valve = doc.createNestedObject("valve");
|
||||||
valve["timeLeft"] = valves.getTimeLeft(valveNumber);
|
valve["timeLeft"] = valves.getTimeLeft(valveNumber);
|
||||||
|
valve["number"] = valveNumber;
|
||||||
|
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
char topic[64];
|
char topic[64];
|
||||||
sprintf(topic, "%s/valve_%d", mainTopic, valveNumber);
|
sprintf(topic, "%s/valve/%d", mainTopic, valveNumber);
|
||||||
size_t n = serializeJson(doc, buffer);
|
size_t n = serializeJson(doc, buffer);
|
||||||
client.publish(topic, buffer, n);
|
client.publish(topic, buffer, n);
|
||||||
}
|
}
|
||||||
@@ -197,6 +203,7 @@ void sendInfo() {
|
|||||||
JsonObject info = doc.createNestedObject("valve");
|
JsonObject info = doc.createNestedObject("valve");
|
||||||
info["uptime"] = millis() / 1000;
|
info["uptime"] = millis() / 1000;
|
||||||
info["opened"] = valves.getNumOfOpen();
|
info["opened"] = valves.getNumOfOpen();
|
||||||
|
info["max"] = valves.getMaxOpen();
|
||||||
|
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
char topic[64];
|
char topic[64];
|
||||||
|
|||||||
Reference in New Issue
Block a user