Files
SpotMicroESP32-Leika/esp32/include/peripherals/barometer.h
T
2026-01-03 22:15:00 +01:00

48 lines
1.1 KiB
C++

#pragma once
#include <SPI.h>
#include <Wire.h>
#include <utils/math_utils.h>
#include <Adafruit_BMP085_U.h>
#include <Adafruit_Sensor.h>
#include <peripherals/sensor.hpp>
struct BarometerMsg {
float pressure {-1};
float altitude {-1};
float temperature {-1};
bool success {false};
};
class Barometer : public SensorBase<BarometerMsg> {
public:
bool initialize() override {
_msg.success = _bmp.begin();
return _msg.success;
}
bool update() override {
if (!_msg.success) return false;
_bmp.getTemperature(&_msg.temperature);
sensors_event_t event;
_bmp.getEvent(&event);
_msg.pressure = event.pressure;
_msg.altitude = _bmp.pressureToAltitude(seaLevelPressure, _msg.pressure);
return true;
}
float getPressure() { return _msg.pressure; }
float getAltitude() { return _msg.altitude; }
float getTemperature() { return _msg.temperature; }
bool active() { return _msg.success; }
private:
Adafruit_BMP085_Unified _bmp {10085};
const float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA;
};