#include "GyverBME280.h" class Barometer { public: Barometer(GyverBME280 *bme) { _bme = bme; }; ~Barometer() { delete this->_bme; } bool initialize(void) { _bme->setMode(NORMAL_MODE); _bme->setFilter(FILTER_COEF_16); _bme->setTempOversampling(OVERSAMPLING_2); _bme->setPressOversampling(OVERSAMPLING_16); _bme->setStandbyTime(STANDBY_500US); return _bme->begin(); } void measureBaseAltitudeSync(void) { for (int i = 0; i < _calibrationIterationsCount; ++i) { _startedAltitude += altitude(); delay(_calibrationIterationDelay); } _startedAltitude /= _calibrationIterationsCount; } void measureBaseAltitudeAsync(void) { _isStartCalibration = true; } float altitude() /* [cm] */ { return pressureToAltitude(_bme->readPressure()) * 100; } float flightHeight() /* [cm] */ { return altitude() - _startedAltitude; } void tick() { if (_isStartCalibration) { if (_isStartCalibration && millis() - _calibrationTimer >= _calibrationIterationDelay) { _startedAltitude += altitude(); } if (++_calibrationIterationsCounter >= _calibrationIterationsCount) { _startedAltitude /= _calibrationIterationsCount; _isStartCalibration = false; } } } private: GyverBME280 *_bme; float _startedAltitude = 0; bool _isStartCalibration = false; int _calibrationTimer; int _calibrationIterationsCounter = 0; static constexpr int _calibrationIterationsCount = 1500; static constexpr int _calibrationIterationDelay = 1; // [ms] };