29class BME280 :
public ThermHygroPressMeter {
31 explicit BME280(int8_t address = 0x77,
float altitude = NAN)
32 : address(address), sensorStatus(
false), altitude(altitude) {
36 float value = TEMPERATURE_NOT_AVAILABLE;
37 bool retryDone =
false;
39 if (!sensorStatus || isnan(value)) {
40 sensorStatus = bme.begin(address);
43 value = TEMPERATURE_NOT_AVAILABLE;
45 value = bme.readTemperature();
47 }
while (isnan(value) && !retryDone);
52 float value = HUMIDITY_NOT_AVAILABLE;
53 bool retryDone =
false;
55 if (!sensorStatus || isnan(value)) {
56 sensorStatus = bme.begin(address);
59 value = HUMIDITY_NOT_AVAILABLE;
61 value = bme.readHumidity();
63 }
while (isnan(value) && !retryDone);
67 double getPressure() {
68 float value = PRESSURE_NOT_AVAILABLE;
69 bool retryDone =
false;
71 if (!sensorStatus || isnan(value)) {
72 sensorStatus = bme.begin(address);
75 value = PRESSURE_NOT_AVAILABLE;
77 value = bme.readPressure() / 100.0;
79 }
while (isnan(value) && !retryDone);
80 if (!isnan(altitude)) {
81 value = bme.seaLevelForAltitude(altitude, value);
87 sensorStatus = bme.begin(address);
89 pressureChannel.setNewValue(getPressure());
90 channel.setNewValue(getTemp(), getHumi());
93 void setAltitude(
float newAltitude) {
94 altitude = newAltitude;