-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmeasurement_functions.cpp
145 lines (100 loc) · 2.87 KB
/
measurement_functions.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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include "measurement_functions.h"
/*
Function: measureValues
The function measures all measurement values.
*/
void measureValues() {
updateCounter(); // Update the cycle counter
measureRssi(); // Measure RSSI on wifi
measureWaterLevel(measWaterLevel); // Measure water level
measureHumidity(measHumidity); // Measure humidity in soil
checkWaterLevel(); // Check the water level
}
/*
Function: updateCounter
The function updates the counter value.
*/
void updateCounter() {
// Increase the alive counter
counter = counter + 1;
Serial.print("This cycle is : ");
Serial.print(counter);
Serial.println();
}
/*
Function: checkWaterLevel
The function checks that the water level in container is ok, if not the
water alert is set.
*/
void checkWaterLevel() {
if (waterLevelCm >= waterLevelMax) {
waterAlert = true;
} else {
waterAlert = false;
}
}
/*
Function: measureRssi
Output: rssi - the RSSI value
The function measures the RSSI strength.
*/
int32_t measureRssi() {
// Get the WiFi strength
rssi = WiFi.RSSI();
Serial.print("RSSI is: ");
Serial.println(rssi);
return rssi;
}
/*
Function: measureHumidity
Input: doMeasurement - boolean if measurement shall be done
The function measures the hunidity level in percentage within the soil.
*/
void measureHumidity(bool doMeasurement) {
if (doMeasurement = false) {
humidityPercentage = 100;
return;
}
int soilMoistureValue = 0;
float soilmoisturepercent = 0.0;
// Read out soil humidity sensor value
soilMoistureValue = analogRead(A0);
if (soilMoistureValue > AirValue) {
soilMoistureValue = AirValue;
}
if (soilMoistureValue < WaterValue) {
soilMoistureValue = WaterValue;
}
soilmoisturepercent = map(soilMoistureValue, AirValue, WaterValue, 0, 100);
Serial.print("Soli sensor moisture percentage: ");
Serial.println(soilmoisturepercent);
humidityPercentage = soilmoisturepercent;
}
/*
Function: measureWaterLevel
Input: doMeasurement - boolean if measurement shall be done
The function measures the distance to the water level.
*/
void measureWaterLevel(bool doMeasurement) {
if (doMeasurement = false) {
waterLevelCm = 100;
return;
}
long duration;
float distanceCm;
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculate the distance
distanceCm = duration * SOUND_VELOCITY/2;
// Prints the distance on the Serial Monitor
Serial.print("Distance (cm): ");
Serial.println(distanceCm);
waterLevelCm = distanceCm;
}