pump refactor round 1
This commit is contained in:
		@@ -82,12 +82,12 @@
 | 
				
			|||||||
/** \addtogroup Configuration
 | 
					/** \addtogroup Configuration
 | 
				
			||||||
 *  @{
 | 
					 *  @{
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define FIRMWARE_VERSION "sw 2.0 hw 0.10b"
 | 
					#define FIRMWARE_VERSION "sw 2.1 hw 0.10b"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define TIMED_LIGHT_PIN CUSTOM1_PIN5
 | 
					#define TIMED_LIGHT_PIN CUSTOM1_PIN5
 | 
				
			||||||
//#define FLOWMETER_PIN CUSTOM1_PIN1
 | 
					#define FLOWMETER_PIN CUSTOM1_PIN1
 | 
				
			||||||
#ifdef FLOWMETER_PIN
 | 
					#ifdef FLOWMETER_PIN
 | 
				
			||||||
    #define FLOWMETER_FLOWFACTOR 22 /** F = 22 * Q;Q = L/min */
 | 
					    #define FLOWMETER_FLOWFACTOR 23 /** F = 22 * Q;Q = L/min */
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MOIST_SENSOR_MAX_FRQ               60000 // 60kHz (500Hz margin)
 | 
					#define MOIST_SENSOR_MAX_FRQ               60000 // 60kHz (500Hz margin)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -105,9 +105,10 @@ HomieSetting<const char *> ntpServer("ntpServer", "NTP server (pool.ntp.org as d
 | 
				
			|||||||
        HomieSetting<long> mPumpAllowedHourRangeEnd##plant = HomieSetting<long>("hourend" strplant, "Plant" strplant " - Range pump allowed hour end (0-23)");                                            \
 | 
					        HomieSetting<long> mPumpAllowedHourRangeEnd##plant = HomieSetting<long>("hourend" strplant, "Plant" strplant " - Range pump allowed hour end (0-23)");                                            \
 | 
				
			||||||
        HomieSetting<bool> mPumpOnlyWhenLowLight##plant = HomieSetting<bool>("lowLight" strplant, "Plant" strplant " - Enable the Pump only, when there is no sunlight"); \
 | 
					        HomieSetting<bool> mPumpOnlyWhenLowLight##plant = HomieSetting<bool>("lowLight" strplant, "Plant" strplant " - Enable the Pump only, when there is no sunlight"); \
 | 
				
			||||||
        HomieSetting<long> mPumpCooldownInMinutes##plant = HomieSetting<long>("delay" strplant, "Plant" strplant " - How long to wait until the pump is activated again (minutes)");                      \
 | 
					        HomieSetting<long> mPumpCooldownInMinutes##plant = HomieSetting<long>("delay" strplant, "Plant" strplant " - How long to wait until the pump is activated again (minutes)");                      \
 | 
				
			||||||
        HomieSetting<long> pPumpDuration##plant = HomieSetting<long>("pumpDuration" strplant, "Plant" strplant " - time seconds or ml (if using flowmeter) to water when pump is active");                      \
 | 
					        HomieSetting<long> pPumpDuration##plant = HomieSetting<long>("pumpDuration" strplant, "Plant" strplant " - time seconds to water when pump is active");                      \
 | 
				
			||||||
 | 
					        HomieSetting<long> pPumpMl##plant = HomieSetting<long>("pumpAmount" strplant, "Plant" strplant " - ml (if using flowmeter) to water when pump is active");                      \
 | 
				
			||||||
        HomieSetting<long> pPowerLevel##plant = HomieSetting<long>("powerLevel" strplant, "Plant" strplant " - pwm duty cycle in percent");                      \
 | 
					        HomieSetting<long> pPowerLevel##plant = HomieSetting<long>("powerLevel" strplant, "Plant" strplant " - pwm duty cycle in percent");                      \
 | 
				
			||||||
        PlantSettings_t mSetting##plant = {&mSensorDry##plant, &mPumpAllowedHourRangeStart##plant, &mPumpAllowedHourRangeEnd##plant, &mPumpOnlyWhenLowLight##plant, &mPumpCooldownInMinutes##plant, &pPumpDuration##plant, &pPowerLevel##plant}; \
 | 
					        PlantSettings_t mSetting##plant = {&mSensorDry##plant, &mPumpAllowedHourRangeStart##plant, &mPumpAllowedHourRangeEnd##plant, &mPumpOnlyWhenLowLight##plant, &mPumpCooldownInMinutes##plant, &pPumpDuration##plant, &pPowerLevel##plant, &pPumpMl##plant}; \
 | 
				
			||||||
        /**< Generate all settings for one plant \
 | 
					        /**< Generate all settings for one plant \
 | 
				
			||||||
         * \
 | 
					         * \
 | 
				
			||||||
         * Feature to start pumping only at morning: @link{SOLAR_CHARGE_MIN_VOLTAGE} and @link{SOLAR_CHARGE_MAX_VOLTAGE} \
 | 
					         * Feature to start pumping only at morning: @link{SOLAR_CHARGE_MIN_VOLTAGE} and @link{SOLAR_CHARGE_MAX_VOLTAGE} \
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,6 +29,7 @@ typedef struct PlantSettings_t
 | 
				
			|||||||
    HomieSetting<long> *pPumpCooldownInSeconds;
 | 
					    HomieSetting<long> *pPumpCooldownInSeconds;
 | 
				
			||||||
    HomieSetting<long> *pPumpDuration;
 | 
					    HomieSetting<long> *pPumpDuration;
 | 
				
			||||||
    HomieSetting<long> *pPumpPowerLevel;
 | 
					    HomieSetting<long> *pPumpPowerLevel;
 | 
				
			||||||
 | 
					    HomieSetting<long> *pPumpMl;
 | 
				
			||||||
} PlantSettings_t;
 | 
					} PlantSettings_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -80,6 +80,7 @@ unsigned long setupFinishedTimestamp;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bool pumpStarted = false;
 | 
					bool pumpStarted = false;
 | 
				
			||||||
long pumpTarget = -1;
 | 
					long pumpTarget = -1;
 | 
				
			||||||
 | 
					long lastSendPumpUpdate = 0;
 | 
				
			||||||
#ifdef FLOWMETER_PIN
 | 
					#ifdef FLOWMETER_PIN
 | 
				
			||||||
long pumpTargetMl = -1;
 | 
					long pumpTargetMl = -1;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -568,10 +569,10 @@ void initPumpLogic()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  pcnt_counter_clear(unit); // Zera o contador PCNT
 | 
					  pcnt_counter_clear(unit); // Zera o contador PCNT
 | 
				
			||||||
  pcnt_counter_resume(unit);
 | 
					  pcnt_counter_resume(unit);
 | 
				
			||||||
#else
 | 
					#endif
 | 
				
			||||||
  pumpTarget = millis() + (mPlants[pumpToRun].getPumpDuration() * 1000);
 | 
					  pumpTarget = millis() + (mPlants[pumpToRun].getPumpDuration() * 1000);
 | 
				
			||||||
  log(LOG_LEVEL_INFO, "Starting pump " + String(pumpToRun) + " for " + String(mPlants[pumpToRun].getPumpDuration()) + "s", LOG_PUMP_STARTED_CODE);
 | 
					  log(LOG_LEVEL_INFO, "Starting pump " + String(pumpToRun) + " for " + String(mPlants[pumpToRun].getPumpDuration()) + "s", LOG_PUMP_STARTED_CODE);
 | 
				
			||||||
#endif
 | 
					
 | 
				
			||||||
  //enable power
 | 
					  //enable power
 | 
				
			||||||
  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
 | 
					  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
 | 
				
			||||||
  digitalWrite(OUTPUT_ENABLE_PUMP, HIGH);
 | 
					  digitalWrite(OUTPUT_ENABLE_PUMP, HIGH);
 | 
				
			||||||
@@ -592,6 +593,13 @@ void pumpActiveLoop()
 | 
				
			|||||||
    rtcLastWateringPlant[pumpToRun] = getCurrentTime();
 | 
					    rtcLastWateringPlant[pumpToRun] = getCurrentTime();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  bool mqttUpdateTick = false;
 | 
				
			||||||
 | 
					  if (lastSendPumpUpdate + 1000 < millis())
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    lastSendPumpUpdate = millis();
 | 
				
			||||||
 | 
					    mqttUpdateTick = true;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef FLOWMETER_PIN
 | 
					#ifdef FLOWMETER_PIN
 | 
				
			||||||
  int16_t pulses;
 | 
					  int16_t pulses;
 | 
				
			||||||
  pcnt_unit_t unit = (pcnt_unit_t)(PCNT_UNIT_7);
 | 
					  pcnt_unit_t unit = (pcnt_unit_t)(PCNT_UNIT_7);
 | 
				
			||||||
@@ -612,14 +620,25 @@ void pumpActiveLoop()
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
      targetReached = true;
 | 
					      targetReached = true;
 | 
				
			||||||
      pcnt_counter_pause(unit);
 | 
					      pcnt_counter_pause(unit);
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
      mPlants[pumpToRun].setProperty("waterusage").send(String(pumped));
 | 
					      mPlants[pumpToRun].setProperty("waterusage").send(String(pumped));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
#else
 | 
					    else if (mqttUpdateTick)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      mPlants[pumpToRun].setProperty("waterusage").send(String(pumped));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  long duration = pumpTarget - millis();
 | 
				
			||||||
  if (millis() > pumpTarget)
 | 
					  if (millis() > pumpTarget)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
 | 
					    mPlants[pumpToRun].setProperty("watertime").send(String(duration));
 | 
				
			||||||
    targetReached = true;
 | 
					    targetReached = true;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  else if (mqttUpdateTick)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    mPlants[pumpToRun].setProperty("watertime").send(String(duration));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (targetReached)
 | 
					  if (targetReached)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user