10#ifndef M5_UNIT_TUBE_UNIT_MCP_H10_HPP
11#define M5_UNIT_TUBE_UNIT_MCP_H10_HPP
13#include <M5UnitComponent.hpp>
82class UnitMCP_H10 :
public Component,
public PeriodicMeasurementAdapter<UnitMCP_H10, mcp_h10::Data> {
94 : Component(DEFAULT_ADDRESS),
95 _data{new
m5::container::CircularBuffer<
mcp_h10::Data>(1)},
106 virtual bool begin()
override;
109 virtual void update(
const bool force =
false)
override;
173 return !empty() ? oldest().pressure() : std::numeric_limits<float>::quiet_NaN();
186 return PeriodicMeasurementAdapter<UnitMCP_H10, mcp_h10::Data>::startPeriodicMeasurement(interval);
194 return PeriodicMeasurementAdapter<UnitMCP_H10, mcp_h10::Data>::stopPeriodicMeasurement();
214 return _calib_zero_diff != 0.0f;
223 _calib_zero_diff = vzero - ideal_zero_voltage;
228 _calib_zero_diff = 0.0f;
234 bool read_voltage_millivolts(
float& voltage, uint16_t& raw);
235 bool read_voltage_via_pbhub(
float& voltage, uint16_t& raw);
236 bool start_periodic_measurement(
const uint32_t interval);
237 bool stop_periodic_measurement();
239 std::unique_ptr<m5::container::CircularBuffer<mcp_h10::Data>> _data{};
241 M5_UNIT_COMPONENT_PERIODIC_MEASUREMENT_ADAPTER_HPP_BUILDER(
UnitMCP_H10, mcp_h10::Data);
244 float _minV{}, _maxV{}, _coefficient{}, _offset{};
245 float _calib_zero_diff{};
254class UnitMCP_H10_B200KPPN :
public UnitMCP_H10 {
255 M5_UNIT_COMPONENT_HPP_BUILDER(UnitMCP_H10_B200KPPN, 0x00 );
258 explicit UnitMCP_H10_B200KPPN() :
UnitMCP_H10(0.1f, 3.1f, 100.f, -110.f)
261 virtual ~UnitMCP_H10_B200KPPN() =
default;
MCP-H10 family unit base class.
bool measureSingleshot(mcp_h10::Data &d)
Measurement single shot.
Definition unit_MCP_H10.cpp:83
bool isCalibrated() const
Returns true if calibration is set.
Definition unit_MCP_H10.hpp:212
bool stopPeriodicMeasurement()
Stop periodic measurement.
Definition unit_MCP_H10.hpp:192
UnitMCP_H10(const float minV, const float maxV, const float coefficient, const float offset)
Constructor.
Definition unit_MCP_H10.hpp:93
virtual void update(const bool force=false) override
Update periodic measurement.
Definition unit_MCP_H10.cpp:49
config_t config()
Gets the configuration.
Definition unit_MCP_H10.hpp:127
float maximumVoltage() const
maximum voltage (OH)
Definition unit_MCP_H10.hpp:156
float minimumVoltage() const
minimum voltage (OL)
Definition unit_MCP_H10.hpp:151
void setCalibration(const float vzero)
Set calibration parameter.
Definition unit_MCP_H10.hpp:220
float offset() const
offset (B)
Definition unit_MCP_H10.hpp:146
virtual bool begin() override
Begin unit, applying config_t settings.
Definition unit_MCP_H10.cpp:26
void config(const config_t &cfg)
Set the configuration.
Definition unit_MCP_H10.hpp:132
bool startPeriodicMeasurement(const uint32_t interval)
Start periodic measurement.
Definition unit_MCP_H10.hpp:184
void clearCalibration()
Disable calibration.
Definition unit_MCP_H10.hpp:226
float pressure() const
Oldest measured pressure (kPA)
Definition unit_MCP_H10.hpp:171
float voltageRange() const
Voltage range.
Definition unit_MCP_H10.hpp:161
float coefficient() const
coefficient (K)
Definition unit_MCP_H10.hpp:141
Top level namespace of M5stack.
Settings for begin.
Definition unit_MCP_H10.hpp:115
bool start_periodic
Start periodic measurement on begin?
Definition unit_MCP_H10.hpp:117
float calib_vzero
Calibration (Voltage value to be considered as pressure 0)
Definition unit_MCP_H10.hpp:121
uint32_t interval_ms
Interval time if start on begin (ms)
Definition unit_MCP_H10.hpp:119
Measurement data group.
Definition unit_MCP_H10.hpp:29
uint16_t raw
ADC reading (millivolts via GPIO, raw count via PbHub)
Definition unit_MCP_H10.hpp:30
float voltage
Voltage after clamp and calibration.
Definition unit_MCP_H10.hpp:31
float k
Calibration coefficient (K)
Definition unit_MCP_H10.hpp:39
float b
Calibration offset (B)
Definition unit_MCP_H10.hpp:40
float pressure() const
Calculate pressure from voltage using linear calibration (P = k * V + b)
Definition unit_MCP_H10.hpp:34