supla-device
Loading...
Searching...
No Matches
BMP180.h
1// SPDX-FileCopyrightText: AC SOFTWARE SP. Z O.O., malarz
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#ifndef SRC_SUPLA_SENSOR_BMP180_H_
5#define SRC_SUPLA_SENSOR_BMP180_H_
6
7// Dependency: Adafruid BMP085 library - use library manager to install it
8// BMP180 is upgraded version of BMP085
9#include <Adafruit_BMP085.h>
10
11#include "therm_press_meter.h"
12
13namespace Supla {
14namespace Sensor {
15class BMP180 : public ThermPressMeter {
16 public:
17 explicit BMP180(int8_t address = 0x77)
18 : address(address), sensorStatus(false) {
19 }
20
21 double getTemp() {
22 float value = TEMPERATURE_NOT_AVAILABLE;
23 bool retryDone = false;
24 do {
25 if (!sensorStatus || isnan(value)) {
26 sensorStatus = bmp.begin(address);
27 retryDone = true;
28 }
29 value = TEMPERATURE_NOT_AVAILABLE;
30 if (sensorStatus) {
31 value = bmp.readTemperature();
32 }
33 } while (isnan(value) && !retryDone);
34 return value;
35 }
36
37double getPressure() {
38 float value = PRESSURE_NOT_AVAILABLE;
39 bool retryDone = false;
40 do {
41 if (!sensorStatus || isnan(value)) {
42 sensorStatus = bmp.begin(address);
43 retryDone = true;
44 }
45 value = PRESSURE_NOT_AVAILABLE;
46 if (sensorStatus) {
47 value = bmp.readPressure() / 100.0;
48 }
49 } while (isnan(value) && !retryDone);
50 return value;
51 }
52
53 void onInit() {
54 sensorStatus = bmp.begin(address);
55
56 channel.setNewValue(getTemp());
57 pressureChannel.setNewValue(getPressure());
58 }
59
60 protected:
61 int8_t address;
62 bool sensorStatus;
63 Adafruit_BMP085 bmp; // I2C
64};
65
66}; // namespace Sensor
67}; // namespace Supla
68
69#endif // SRC_SUPLA_SENSOR_BMP180_H_
Definition BMP180.h:15
void onInit()
Third method called on element in SuplaDevice.begin()
Definition BMP180.h:53
Definition therm_press_meter.h:11