10#ifndef M5_UNIT_ENV_UNIT_QMP6988_HPP
11#define M5_UNIT_ENV_UNIT_QMP6988_HPP
12#include <M5UnitComponent.hpp>
13#include <m5_utility/stl/extension.hpp>
14#include <m5_utility/container/circular_buffer.hpp>
107 int32_t b00{}, bt1{}, bp1{};
109 int32_t b11{}, bp2{}, b12{}, b21{}, bp3{}, a0{}, a1{}, a2{};
118 std::array<uint8_t, 6>
raw{};
127 const Calibration* calib{};
136class UnitQMP6988 :
public Component,
public PeriodicMeasurementAdapter<UnitQMP6988, qmp6988::Data> {
157 explicit UnitQMP6988(
const uint8_t addr = DEFAULT_ADDRESS)
158 : Component(addr), _data{new
m5::container::CircularBuffer<
qmp6988::
Data>(1)}
160 auto ccfg = component_config();
161 ccfg.clock = 100 * 1000U;
163 component_config(ccfg);
165 virtual ~UnitQMP6988()
169 virtual bool begin()
override;
170 virtual void update(
const bool force =
false)
override;
191 return !empty() ? oldest().temperature() : std::numeric_limits<float>::quiet_NaN();
196 return !empty() ? oldest().celsius() : std::numeric_limits<float>::quiet_NaN();
201 return !empty() ? oldest().fahrenheit() : std::numeric_limits<float>::quiet_NaN();
206 return !empty() ? oldest().pressure() : std::numeric_limits<float>::quiet_NaN();
225 return PeriodicMeasurementAdapter<UnitQMP6988, qmp6988::Data>::startPeriodicMeasurement(osrsPressure,
226 osrsTemperature, f, st);
235 return PeriodicMeasurementAdapter<UnitQMP6988, qmp6988::Data>::startPeriodicMeasurement();
243 return PeriodicMeasurementAdapter<UnitQMP6988, qmp6988::Data>::stopPeriodicMeasurement();
360 bool start_periodic_measurement();
363 bool stop_periodic_measurement();
365 bool read_calibration(qmp6988::Calibration& c);
367 bool read_measurement(
qmp6988::Data& d,
const bool only_temperature =
false);
368 bool is_data_ready();
373 std::unique_ptr<m5::container::CircularBuffer<qmp6988::Data>> _data{};
374 qmp6988::Calibration _calibration{};
376 bool _only_temperature{};
383constexpr uint8_t CHIP_ID{0xD1};
385constexpr uint8_t READ_PRESSURE{0xF7};
386constexpr uint8_t READ_TEMPERATURE{0xFA};
388constexpr uint8_t IO_SETUP{0xF5};
389constexpr uint8_t CONTROL_MEASUREMENT{0xF4};
390constexpr uint8_t GET_STATUS{0xF3};
391constexpr uint8_t IIR_FILTER{0xF1};
393constexpr uint8_t SOFT_RESET{0xE0};
395constexpr uint8_t READ_COMPENSATION_COEFFICIENT{0xA0};
Barometric pressure sensor to measure atmospheric pressure and altitude estimation.
Definition unit_QMP6988.hpp:136
float celsius() const
Oldest measured temperature (Celsius)
Definition unit_QMP6988.hpp:194
bool writeOversampling(const qmp6988::Oversampling osrsPressure, const qmp6988::Oversampling osrsTemperature)
Write the oversampling conditions.
Definition unit_QMP6988.cpp:341
bool readStandbyTime(qmp6988::Standby &st)
Read the standby time.
Definition unit_QMP6988.cpp:444
config_t config() const
Gets the configuration.
Definition unit_QMP6988.hpp:175
bool measureSingleshot(qmp6988::Data &d, const qmp6988::Oversampling osrsPressure, const qmp6988::Oversampling osrsTemperature, const qmp6988::Filter f)
Measurement single shot.
Definition unit_QMP6988.cpp:290
bool readFilter(qmp6988::Filter &f)
Read the IIR filter co-efficient.
Definition unit_QMP6988.cpp:425
bool writePowerMode(const qmp6988::PowerMode mode)
Write the power mode.
Definition unit_QMP6988.cpp:404
bool writeFilter(const qmp6988::Filter f)
Write the IIR filter co-efficient.
Definition unit_QMP6988.cpp:435
float fahrenheit() const
Oldest measured temperature (Fahrenheit)
Definition unit_QMP6988.hpp:199
bool softReset()
Soft reset.
Definition unit_QMP6988.cpp:475
bool readOversampling(qmp6988::Oversampling &osrsPressure, qmp6988::Oversampling &osrsTemperature)
Read the oversampling conditions.
Definition unit_QMP6988.cpp:330
bool writeOversamplingPressure(const qmp6988::Oversampling osrsPressure)
Write the oversampling conditions for pressure.
Definition unit_QMP6988.cpp:358
float temperature() const
Oldest measured temperature (Celsius)
Definition unit_QMP6988.hpp:189
bool writeOversamplingTemperature(const qmp6988::Oversampling osrsTemperature)
Write the oversampling conditions for temperature.
Definition unit_QMP6988.cpp:373
bool startPeriodicMeasurement(const qmp6988::Oversampling osrsPressure, const qmp6988::Oversampling osrsTemperature, const qmp6988::Filter f, const qmp6988::Standby st)
Start periodic measurement.
Definition unit_QMP6988.hpp:221
void config(const config_t &cfg)
Set the configuration.
Definition unit_QMP6988.hpp:180
bool stopPeriodicMeasurement()
Stop periodic measurement.
Definition unit_QMP6988.hpp:241
bool writeStandbyTime(const qmp6988::Standby st)
Write the standby time.
Definition unit_QMP6988.cpp:454
bool startPeriodicMeasurement()
Start periodic measurement using current register settings.
Definition unit_QMP6988.hpp:233
bool writeUseCaseSetting(const qmp6988::UseCase uc)
Write the settings based on use cases.
Definition unit_QMP6988.cpp:469
float pressure() const
Oldest measured pressure (Pa)
Definition unit_QMP6988.hpp:204
bool readPowerMode(qmp6988::PowerMode &mode)
Read the power mode.
Definition unit_QMP6988.cpp:394
Top level namespace of M5Stack.
Settings for begin.
Definition unit_QMP6988.hpp:144
qmp6988::Filter filter
Filter if start on begin.
Definition unit_QMP6988.hpp:152
qmp6988::Standby standby
Standby time if start on begin.
Definition unit_QMP6988.hpp:154
qmp6988::Oversampling osrs_pressure
pressure oversampling if start on begin
Definition unit_QMP6988.hpp:148
qmp6988::Oversampling osrs_temperature
temperature oversampling if start on begin
Definition unit_QMP6988.hpp:150
bool start_periodic
Start periodic measurement on begin?
Definition unit_QMP6988.hpp:146
Light sensor measurement data.
Definition unit_HatYun.hpp:32
Measurement data group.
Definition unit_QMP6988.hpp:117
float temperature() const
temperature (Celsius)
Definition unit_QMP6988.hpp:120
float fahrenheit() const
temperature (Fahrenheit)
Definition unit_QMP6988.cpp:169
float celsius() const
temperature (Celsius)
Definition unit_QMP6988.cpp:158
float pressure() const
pressure (Pa)
Definition unit_QMP6988.cpp:174
std::array< uint8_t, 6 > raw
Definition unit_QMP6988.hpp:118
UseCase
Preset settings.
Definition unit_QMP6988.hpp:97
OversamplingSetting
Oversampling Settings.
Definition unit_QMP6988.hpp:55
@ HighSpeed
osrsP:X2 osrsT:X1
@ HighAccuracy
osrsP:X16 osrsT:X2
@ Standard
osrsP:X8 osrsT:X1
PowerMode
Operation mode.
Definition unit_QMP6988.hpp:30
Filter
Filter setting.
Definition unit_QMP6988.hpp:69
Oversampling
Oversampling value.
Definition unit_QMP6988.hpp:40
Standby
Measurement standby time for power mode Normal.
Definition unit_QMP6988.hpp:82