pump.h:
#ifndef PUMP_H
#define PUMP_H
class pump
{
public:
pump();
pump(int pumpP);
void setPumpCycle(int cycle);
void setPumpTimerWatered(long pTimerW);
void setPumpTimerDry(long pTimerDry);
void setPumpDelayOn(long pDelayOn);
void setPumpDelayOff(long pDelayOff);
void setMoistureThreshold(int mThresh);
void setMoisture(int moisture);
void setLedPin(int led);
void setPumpData(int cycle, int mThresh, int led);
void setPumpTimers(long pTimerW, long pTimerD, long pDelayOn, long pDelayOff);
void setPumpSafetyShutOff(unsigned long shutOffValue);
int getMoistureThreshold();
int getMoistureValue();
long getPumpDelayOn();
long getPumpDelayOff();
long getPumpTimer();
long getPumpTimerWatered();
long getPumpTimerDry();
unsigned long getCurrentMillis();
unsigned long getPreviousMillis();
unsigned long getPumpSafetyShutOff();
void pumpFailSafe();
void runPump();
private:
int _pumpPin,
_ledPin,
_pumpCycle,
_pumpSwitch,
_moistureThreshold,
_val;
long _pumpDelayOn,
_pumpDelayOff,
_pumpTimer,
_pumpTimerWatered,
_pumpTimerDry;
unsigned long _currentMillis,
_previousMillis,
_pumpSafetyShutOff;
void runThePump();
};
#endif
and pump.cpp
#include "pump.h"
#include "Arduino.h"
int _pumpPin,
_ledPin,
_pumpCycle,
_pumpSwitch = 0,
_moistureThreshold,
_val;
long _pumpDelayOn,
_pumpDelayOff,
_pumpTimer = 0, //value takes on others, so pump will test immediately when plugged in
_pumpTimerWatered,
_pumpTimerDry;
unsigned long _previousMillis = 0,
_pumpSafetyShutOff = 3600000;
pump::pump() {
}
pump::pump(int pumpP) {
this->_pumpPin = pumpP;
pinMode(_pumpPin, OUTPUT);
}
void pump::setPumpCycle(int cycle) {
this->_pumpCycle = cycle;
}
void pump::setPumpTimerWatered(long pTimerW) {
this->_pumpTimerWatered = pTimerW;
}
void pump::setPumpTimerDry(long pTimerD) {
this->_pumpTimerDry = pTimerD;
}
void pump::setPumpDelayOn(long pDelayOn) {
this->_pumpDelayOn = pDelayOn;
}
void pump::setPumpDelayOff(long pDelayOff) {
this->_pumpDelayOff = pDelayOff;
}
void pump::setMoistureThreshold(int mThresh) {
this->_moistureThreshold = mThresh;
}
void pump::setMoisture(int moisture) {
this->_val = moisture;
}
void pump::setLedPin(int led) {
this->_ledPin = led;
pinMode(_ledPin, OUTPUT);
}
void pump::setPumpData(int cycle, int mThresh, int led) {
this->_pumpCycle = cycle;
this->_moistureThreshold = mThresh;
this->_ledPin = led;
pinMode(_ledPin, OUTPUT);
}
void pump::setPumpTimers(long pTimerW, long pTimerD, long pDelayOn, long pDelayOff) {
this->_pumpTimerWatered = pTimerW;
this->_pumpTimerDry = pTimerD;
this->_pumpDelayOn = pDelayOn;
this->_pumpDelayOff = pDelayOff;
}
void pump::setPumpSafetyShutOff(unsigned long shutOffValue) {
this->_pumpSafetyShutOff = shutOffValue;
}
int pump::getMoistureThreshold() {
return _moistureThreshold;
}
int pump::getMoistureValue() {
return _val;
}
long pump::getPumpDelayOn() {
return _pumpDelayOn;
}
long pump::getPumpDelayOff() {
return _pumpDelayOff;
}
long pump::getPumpTimer() {
return _pumpTimer;
}
long pump::getPumpTimerWatered() {
return _pumpTimerWatered;
}
long pump::getPumpTimerDry() {
return _pumpTimerDry;
}
unsigned long pump::getCurrentMillis() {
return _currentMillis;
}
unsigned long pump::getPreviousMillis() {
return _previousMillis;
}
unsigned long pump::getPumpSafetyShutOff() {
return _pumpSafetyShutOff;
}
void pump::pumpFailSafe()
{
unsigned long _cMils = millis();
if (_cMils - _previousMillis >= _pumpSafetyShutOff)
{
digitalWrite(_pumpPin, LOW);
digitalWrite(_ledPin, LOW);
}
}
void pump::runPump() {
runThePump();
}
void pump::runThePump()
{
unsigned long _currentMillis = millis();
if (_currentMillis - _previousMillis >= _pumpTimer)
{
_previousMillis = _currentMillis;
if (_val < _moistureThreshold)
{
for (int x = 0; x < _pumpCycle;) {
if (_pumpSwitch == 0) {
Serial.println("Turning pump On");
digitalWrite(_pumpPin, HIGH);
digitalWrite(_ledPin, HIGH);
delay(_pumpDelayOn);
_pumpSwitch = 1;
}
else if (_pumpSwitch == 1) {
Serial.println("Turning pump Off");
digitalWrite(_pumpPin, LOW);
digitalWrite(_ledPin, LOW);
if (x < _pumpCycle) {
delay(_pumpDelayOff);
}
_pumpSwitch = 0;
x++;
}
}
_pumpTimer = _pumpTimerWatered;
Serial.println("Exiting for loop");
}
else {
_pumpTimer = _pumpTimerDry;
Serial.println("Plant moisture is fine, Will check again in 6 hours");
}
}
}
:o :o :o :o edited weird spacing