-
Notifications
You must be signed in to change notification settings - Fork 0
/
IrrigationValve.cpp
88 lines (71 loc) · 1.76 KB
/
IrrigationValve.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/*
* IrrigationValve.cpp
*
* Created: 12/20/2019 7:34:58 PM
* Author: Tristan Callahan
*/
#include "IrrigationValve.h"
void IrrigationValve::closeValve(void) {
if ( (AutoFarm::Clock::currentTimeStamp().unixtime - timeValveOpened.unixtime) > 300 )
{
digitalWrite(irrigationValvePin, LOW);
irrigationValveState = LOW;
}
}
void IrrigationValve::openValve(void) {
digitalWrite(irrigationValvePin, HIGH);
irrigationValveState = HIGH;
timeValveOpened = AutoFarm::Clock::currentTimeStamp();
weWateredToday();
}
long IrrigationValve::getRainInInches()
{
return Interrupts::Interrupt::getRainInInches();
}
boolean IrrigationValve::shouldWeIrrigate()
{
float AvgRain {0};
float last3Days{0};
for (int i=0; i<daysInAWeek; ++i)
{
AvgRain = AvgRain + pastWeek[i].inchesOfRain;
}
AvgRain = AvgRain / 7;
last3Days = (pastWeek[0].inchesOfRain + pastWeek[1].inchesOfRain + pastWeek[2].inchesOfRain) /3;
float anyLately = (pastWeek[0].inchesOfRain + pastWeek[1].inchesOfRain + pastWeek[2].inchesOfRain);
if (AvgRain < 0.5)
{
return true;
}
if (last3Days < .5)
{
return true;
}
if (anyLately == 0)
{
return true;
}
return false;
}
int IrrigationValve::getIrrigationValveState()
{
return irrigationValveState;
}
AutoFarm::TimeStamp IrrigationValve::getLastIrrigationReport()
{
return pastWeek[0].time;
}
void IrrigationValve::saveIrrigationReport()
{
for(int i = 6; i > 0; ++i)
{
pastWeek[i] = pastWeek[i-1];
}
pastWeek[0].didWeWaterToday = false;
pastWeek[0].inchesOfRain = Interrupts::Interrupt::getRainInInches();
pastWeek[0].time = AutoFarm::Clock::currentTimeStamp();
}
void IrrigationValve::weWateredToday()
{
pastWeek[0].didWeWaterToday = true;
}