-
Notifications
You must be signed in to change notification settings - Fork 0
/
Barometer.cpp
50 lines (42 loc) · 1.17 KB
/
Barometer.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
#include "Barometer.h"
Barometer::Barometer(Logger *logger, StateStore *stateStore)
{
this->logger = logger;
this->stateStore = stateStore;
}
void Barometer::boot()
{
if (!this->bmp.begin()) {
this->logger->info("Could not find a valid BMP3 sensor, check wiring!");
while (true);
}
this->bmp.setTemperatureOversampling(BMP3_OVERSAMPLING_8X);
this->bmp.setPressureOversampling(BMP3_OVERSAMPLING_4X);
this->bmp.setIIRFilterCoeff(BMP3_IIR_FILTER_COEFF_3);
// First reading is always wrong
if (!this->bmp.performReading()) {
this->logger->warn("Failed to perform reading :(");
}
double pressure = this->bmp.pressure;
delay(2000);
}
void Barometer::tick(unsigned long timestamp)
{
if (this->lastUpdateTimestamp == 0 || timestamp - this->lastUpdateTimestamp > 1000) {
this->lastUpdateTimestamp = timestamp;
int pressure = this->measure();
this->stateStore->dispatch(
ATMOS_PRESSURE_WAS_MEASURED,
timestamp,
String(pressure)
);
}
}
int Barometer::measure()
{
if (!this->bmp.performReading()) {
this->logger->warn("Failed to perform reading :(");
return 0;
}
return (int) round(this->bmp.pressure / 10.0F);
}