10#ifndef M5_UNIT_METER_UNIT_KMETERISO_HPP
11#define M5_UNIT_METER_UNIT_KMETERISO_HPP
13#include <M5UnitComponent.hpp>
14#include <m5_utility/container/circular_buffer.hpp>
37 std::array<uint8_t, 4>
raw{};
43 return static_cast<int32_t
>((
static_cast<uint32_t
>(
raw[3]) << 24) | (
static_cast<uint32_t
>(
raw[2]) << 16) |
44 (
static_cast<uint32_t
>(
raw[1]) << 8) |
static_cast<uint32_t
>(
raw[0])) *
54class UnitKmeterISO :
public Component,
public PeriodicMeasurementAdapter<UnitKmeterISO, kmeter_iso::Data> {
55 M5_UNIT_COMPONENT_HPP_BUILDER(UnitKmeterISO, 0x66);
71 explicit UnitKmeterISO(
const uint8_t addr = DEFAULT_ADDRESS)
72 : Component(addr), _data{new
m5::container::CircularBuffer<kmeter_iso::Data>(1)}
74 auto ccfg = component_config();
75 ccfg.clock = 100 * 1000U;
76 component_config(ccfg);
78 virtual ~UnitKmeterISO()
82 virtual bool begin()
override;
83 virtual void update(
const bool force =
false)
override;
120 return !empty() ? oldest().temperature() : std::numeric_limits<float>::quiet_NaN();
132 return PeriodicMeasurementAdapter<UnitKmeterISO, kmeter_iso::Data>::startPeriodicMeasurement();
143 return PeriodicMeasurementAdapter<UnitKmeterISO, kmeter_iso::Data>::startPeriodicMeasurement(interval, munit);
151 return PeriodicMeasurementAdapter<UnitKmeterISO, kmeter_iso::Data>::stopPeriodicMeasurement();
181 const uint32_t timeoutMs = 100);
192 const uint32_t timeoutMs = 100);
214 bool start_periodic_measurement();
216 bool stop_periodic_measurement();
226 M5_UNIT_COMPONENT_PERIODIC_MEASUREMENT_ADAPTER_HPP_BUILDER(UnitKmeterISO, kmeter_iso::Data);
229 std::unique_ptr<m5::container::CircularBuffer<kmeter_iso::Data>> _data{};
230 kmeter_iso::MeasurementUnit _munit{kmeter_iso::MeasurementUnit::Celsius};
234namespace kmeter_iso {
238constexpr uint8_t TEMPERATURE_CELSIUS_REG{0X00};
239constexpr uint8_t TEMPERATURE_FAHRENHEIT_REG{0X04};
240constexpr uint8_t INTERNAL_TEMPERATURE_CELSIUS_REG{0X10};
241constexpr uint8_t INTERNAL_TEMPERATURE_FAHRENHEIT_REG{0X14};
242constexpr uint8_t STATUS_REG{0x20};
243constexpr uint8_t TEMPERATURE_CELSIUS_STRING_REG{0x30};
244constexpr uint8_t TEMPERATURE_FAHRENHEIT_STRING_REG{0x40};
245constexpr uint8_t INTERNAL_TEMPERATURE_CELSIUS_STRING_REG{0x50};
246constexpr uint8_t INTERNAL_TEMPERATURE_FAHRENHEIT_STRING_REG{0x60};
247constexpr uint8_t FIRMWARE_VERSION_REG{0xFE};
248constexpr uint8_t I2C_ADDRESS_REG{0xFF};
bool measureSingleshot(kmeter_iso::Data &data, const kmeter_iso::MeasurementUnit munit=kmeter_iso::MeasurementUnit::Celsius, const uint32_t timeoutMs=100)
Measure temperature single shot.
Definition unit_KmeterISO.cpp:122
bool readFirmwareVersion(uint8_t &ver)
Read firmware version.
Definition unit_KmeterISO.cpp:117
bool readI2CAddress(uint8_t &i2c_address)
Read device I2C address.
Definition unit_KmeterISO.cpp:187
void setMeasurementUnit(const kmeter_iso::MeasurementUnit munit)
Set the measurement unit on periodic measurement.
Definition unit_KmeterISO.hpp:109
bool stopPeriodicMeasurement()
Stop periodic measurement.
Definition unit_KmeterISO.hpp:149
bool readStatus(uint8_t &status)
Read status.
Definition unit_KmeterISO.cpp:111
kmeter_iso::MeasurementUnit measurementUnit() const
Gets the measurement unit on periodic measurement.
Definition unit_KmeterISO.hpp:103
bool startPeriodicMeasurement()
Start periodic measurement in the current settings.
Definition unit_KmeterISO.hpp:130
bool changeI2CAddress(const uint8_t i2c_address)
Change device I2C address.
Definition unit_KmeterISO.cpp:162
bool startPeriodicMeasurement(const uint32_t interval, const kmeter_iso::MeasurementUnit munit=kmeter_iso::MeasurementUnit::Celsius)
Start periodic measurement.
Definition unit_KmeterISO.hpp:140
config_t config()
Gets the configuration.
Definition unit_KmeterISO.hpp:88
void config(const config_t &cfg)
Set the configuration.
Definition unit_KmeterISO.hpp:93
float temperature() const
Oldest temperature.
Definition unit_KmeterISO.hpp:118
bool measureInternalSingleshot(kmeter_iso::Data &data, const kmeter_iso::MeasurementUnit munit=kmeter_iso::MeasurementUnit::Celsius, const uint32_t timeoutMs=100)
Measure internal temperature single shot.
Definition unit_KmeterISO.cpp:142
Top level namespace of M5stack.
Settings for begin.
Definition unit_KmeterISO.hpp:62
uint32_t interval
periodic interval(ms) if start on begin
Definition unit_KmeterISO.hpp:66
bool start_periodic
Start periodic measurement on begin?
Definition unit_KmeterISO.hpp:64
Measurement data group.
Definition unit_KmeterISO.hpp:36
std::array< uint8_t, 4 > raw
Raw data.
Definition unit_KmeterISO.hpp:37
float temperature() const
Temperature value.
Definition unit_KmeterISO.hpp:41
MeasurementUnit
measurement unit on periodic measurement
Definition unit_KmeterISO.hpp:27