firmware wip - wip pump control
This commit is contained in:
parent
a51cd81651
commit
37e0b33cf3
4 changed files with 57 additions and 22 deletions
|
@ -43,6 +43,11 @@ unsigned long MaintenanceStarted = 0;
|
|||
byte PumpOnTimePassed = 0;
|
||||
bool PumpOnManual = false;
|
||||
|
||||
// helper variable for pump control with soilmoisture
|
||||
// average of last readings
|
||||
unsigned short valSoilmoistureAvg = 0;
|
||||
unsigned short valSoilmoistureAvg_tmp = 0;
|
||||
byte valSoilmoistureAvg_count = 0;
|
||||
//unsigned short
|
||||
|
||||
/*
|
||||
|
|
|
@ -501,10 +501,25 @@ void controlLED() {
|
|||
}
|
||||
|
||||
void refreshSensors() {
|
||||
byte soilmoistureAvgSampleCount = 5;
|
||||
|
||||
valSoilmoisture = getSoilmoisture(MoistureSensor_Type);
|
||||
valHumidity = getHumidity();
|
||||
valTemperature = getTemperature(TemperatureSensor_Type);
|
||||
valWaterlevel = getWaterlevel();
|
||||
|
||||
// get average of 5 readings for valSoilmoisture
|
||||
valSoilmoistureAvg_tmp = valSoilmoistureAvg_tmp + valSoilmoisture;
|
||||
if(valSoilmoistureAvg_count < soilmoistureAvgSampleCount - 1) {
|
||||
valSoilmoistureAvg_count++;
|
||||
} else {
|
||||
// build average
|
||||
valSoilmoistureAvg = valSoilmoistureAvg_tmp / soilmoistureAvgSampleCount;
|
||||
// reset everything
|
||||
valSoilmoistureAvg_tmp = 0;
|
||||
valSoilmoistureAvg_count = 0;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void displayScreens() {
|
||||
|
@ -553,9 +568,10 @@ void displayScreens() {
|
|||
display.println("");
|
||||
display.print("Moisture: ");
|
||||
display.print(valSoilmoisture);
|
||||
display.println(" %");
|
||||
display.print(" % ");
|
||||
display.println(valSoilmoistureAvg);
|
||||
display.println("");
|
||||
if(UsePump == true) {
|
||||
if(UsePump > 0) {
|
||||
display.print("Pump Waterlvl: ");
|
||||
switch(valWaterlevel) {
|
||||
case 0:
|
||||
|
@ -628,7 +644,8 @@ void controlPUMP() {
|
|||
byte PumpInterval;
|
||||
|
||||
// UsePump true and not in harvest state?
|
||||
if ( (UsePump > 0) && (growState() < 3) ) {
|
||||
// dont water within the first 15 sec after startup
|
||||
if ( (UsePump > 0) && (growState() < 3) && (millis() > 15000) ) {
|
||||
switch(growState()) {
|
||||
case 1:
|
||||
PumpInterval = PumpIntervalVeg;
|
||||
|
@ -674,8 +691,8 @@ void controlPUMP() {
|
|||
break;
|
||||
|
||||
case 2:
|
||||
// when valSoilmoisture is lower then SoilMoisture low do some watering
|
||||
if( (valSoilmoisture < SoilmoistureLow) || ( (valSoilmoisture >= SoilmoistureLow) && ( (PumpOnTimePassed > 0) && (PumpOnTimePassed <= PumpOnTime) ) ) ) {
|
||||
// when valSoilmoistureAvg is lower then SoilMoisture low do some watering
|
||||
if( (valSoilmoistureAvg < SoilmoistureLow) || ( (valSoilmoistureAvg >= SoilmoistureLow) && ( (PumpOnTimePassed > 0) && (PumpOnTimePassed <= PumpOnTime) ) ) ) {
|
||||
// check if we alerady exceeded max PumpOnTime
|
||||
if(PumpOnTimePassed < PumpOnTime) {
|
||||
digitalWrite(PinPUMP, HIGH);
|
||||
|
@ -685,7 +702,7 @@ void controlPUMP() {
|
|||
PumpLastOn = timeClient.getEpochTime();
|
||||
PumpOnTimePassed = 0;
|
||||
}
|
||||
// when valSoilmoisture is greater then the Low value,
|
||||
// when valSoilmoistureAvg is greater then the Low value,
|
||||
} else {
|
||||
digitalWrite(PinPUMP, LOW);
|
||||
}
|
||||
|
@ -694,8 +711,8 @@ void controlPUMP() {
|
|||
//
|
||||
case 3:
|
||||
if( ( (timeClient.getEpochTime() - PumpLastOn) >= (PumpInterval) ) && //TODO calculate PumpInterval into days as well here
|
||||
( (valSoilmoisture < SoilmoistureLow) ||
|
||||
( (valSoilmoisture >= SoilmoistureLow) && ( (PumpOnTimePassed > 0) && (PumpOnTimePassed <= PumpOnTime) ) )
|
||||
( (valSoilmoistureAvg < SoilmoistureLow) ||
|
||||
( (valSoilmoistureAvg >= SoilmoistureLow) && ( (PumpOnTimePassed > 0) && (PumpOnTimePassed <= PumpOnTime) ) )
|
||||
) ) {
|
||||
// check if we alerady exceeded max PumpOnTime
|
||||
if(PumpOnTimePassed < PumpOnTime) {
|
||||
|
@ -706,7 +723,7 @@ void controlPUMP() {
|
|||
PumpLastOn = timeClient.getEpochTime();
|
||||
PumpOnTimePassed = 0;
|
||||
}
|
||||
// when valSoilmoisture is greater then the Low value,
|
||||
// when valSoilmoistureAvg is greater then the Low value,
|
||||
} else {
|
||||
digitalWrite(PinPUMP, LOW);
|
||||
}
|
||||
|
@ -714,5 +731,8 @@ void controlPUMP() {
|
|||
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// ensure pump is off when it should be off
|
||||
digitalWrite(PinPUMP, LOW);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* CanGrow_Version.h gets generated from cangrow.sh */
|
||||
|
||||
const char* CanGrowVer = "0.1-dev";
|
||||
const char* CanGrowBuild = "54fec62-20240616204659";
|
||||
const char* CanGrowBuild = "a51cd81-20240617013905";
|
||||
|
||||
|
|
|
@ -373,7 +373,7 @@ void WEBroot() {
|
|||
}
|
||||
|
||||
if(UsePump > 0) {
|
||||
body += "<br><b>Pump water level:</b> ";
|
||||
body += "<b>Pump water level:</b> ";
|
||||
switch(getWaterlevel()) {
|
||||
case 0:
|
||||
body += "<span style='color: green;'>OK</span>";
|
||||
|
@ -515,15 +515,19 @@ void WEBgrowSettings() {
|
|||
body += "'/> %<br>\n";
|
||||
}
|
||||
|
||||
if(UsePump > 0) {
|
||||
body += "Pump interval vegetation: <input class='inputShort' type='number' name='PumpIntervalVeg' min='0' max='255' value='";
|
||||
body += PumpIntervalVeg;
|
||||
body+= "' required>days<br>\n";
|
||||
|
||||
body += "Pump interval bloom: <input class='inputShort' type='number' name='PumpIntervalBloom' min='0' max='255' value='";
|
||||
body += PumpIntervalBloom;
|
||||
body+= "' required>days<br>\n";
|
||||
}
|
||||
|
||||
body += "Pump interval vegetation: every <input class='inputShort' type='number' name='PumpIntervalVeg' min='0' max='255' value='";
|
||||
body += PumpIntervalVeg;
|
||||
body += "' required ";
|
||||
if( (UsePump != 1) && UsePump != 3) { body += "readonly"; }
|
||||
body += "> days<br>\n";
|
||||
|
||||
body += "Pump interval bloom: every <input class='inputShort' type='number' name='PumpIntervalBloom' min='0' max='255' value='";
|
||||
body += PumpIntervalBloom;
|
||||
body += "' required ";
|
||||
if((UsePump != 1) && (UsePump != 3)) { body += "readonly"; }
|
||||
body += "> days<br>\n";
|
||||
|
||||
|
||||
body += "<input type='submit' value='💾 Save settings'>\n";
|
||||
body += "</form>\n";
|
||||
|
@ -1040,6 +1044,7 @@ void APIgetSensors() {
|
|||
JsonDocument jsonSensors;
|
||||
|
||||
jsonSensors["soilmoisture"] = valSoilmoisture;
|
||||
jsonSensors["soilmoistureAvg"] = valSoilmoistureAvg;
|
||||
jsonSensors["temperature"] = valTemperature;
|
||||
jsonSensors["humidity"] = valHumidity;
|
||||
jsonSensors["waterlevel"] = valWaterlevel;
|
||||
|
@ -1054,6 +1059,13 @@ void APIgetDebug() {
|
|||
|
||||
JsonDocument jsonDebug;
|
||||
|
||||
// Runtime vars
|
||||
JsonObject objRuntime = jsonDebug["runtime"].add<JsonObject>();
|
||||
objRuntime["PumpOnTimePassed"] = PumpOnTimePassed;
|
||||
objRuntime["PumpOnManual"] = PumpOnManual;
|
||||
objRuntime["valSoilmoistureAvg"] = valSoilmoistureAvg;
|
||||
objRuntime["valSoilmoistureAvg_tmp"] = valSoilmoistureAvg_tmp;
|
||||
objRuntime["valSoilmoistureAvg_count"] = valSoilmoistureAvg_count;
|
||||
|
||||
// WiFi
|
||||
JsonObject objWiFi = jsonDebug["wifi"].add<JsonObject>();
|
||||
|
@ -1077,8 +1089,6 @@ void APIgetDebug() {
|
|||
objSystem["NtpOffset"] = NtpOffset;
|
||||
objSystem["MaintenanceDuration"] = MaintenanceDuration;
|
||||
objSystem["PumpOnTime"] = PumpOnTime;
|
||||
objSystem["PumpOnTimePassed"] = PumpOnTimePassed;
|
||||
objSystem["PumpOnManual"] = PumpOnManual;
|
||||
objSystem["PumpLastOn"] = PumpLastOn;
|
||||
|
||||
// Grow
|
||||
|
|
Loading…
Reference in a new issue