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{};
40 inline float temperature()
const
42 return static_cast<int32_t
>(((uint32_t)
raw[3] << 24) | ((uint32_t)
raw[2] << 16) | ((uint32_t)
raw[1] << 8) |
43 ((uint32_t)
raw[0] << 0)) *
53class UnitKmeterISO :
public Component,
public PeriodicMeasurementAdapter<UnitKmeterISO, kmeter_iso::Data> {
54 M5_UNIT_COMPONENT_HPP_BUILDER(UnitKmeterISO, 0x66);
71 : Component(addr), _data{new
m5::container::CircularBuffer<kmeter_iso::
Data>(1)}
73 auto ccfg = component_config();
74 ccfg.clock = 100 * 1000U;
75 component_config(ccfg);
77 virtual ~UnitKmeterISO()
81 virtual bool begin()
override;
82 virtual void update(
const bool force =
false)
override;
117 return !empty() ? oldest().temperature() : std::numeric_limits<float>::quiet_NaN();
129 return PeriodicMeasurementAdapter<UnitKmeterISO, kmeter_iso::Data>::startPeriodicMeasurement();
140 return PeriodicMeasurementAdapter<UnitKmeterISO, kmeter_iso::Data>::startPeriodicMeasurement(interval, munit);
148 return PeriodicMeasurementAdapter<UnitKmeterISO, kmeter_iso::Data>::stopPeriodicMeasurement();
178 const uint32_t timeoutMs = 100);
189 const uint32_t timeoutMs = 100);
211 bool start_periodic_measurement();
213 bool stop_periodic_measurement();
223 M5_UNIT_COMPONENT_PERIODIC_MEASUREMENT_ADAPTER_HPP_BUILDER(UnitKmeterISO, kmeter_iso::Data);
226 std::unique_ptr<m5::container::CircularBuffer<kmeter_iso::Data>> _data{};
227 kmeter_iso::MeasurementUnit _munit{kmeter_iso::MeasurementUnit::Celsius};
231namespace kmeter_iso {
235constexpr uint8_t TEMPERATURE_CELSIUS_REG{0X00};
236constexpr uint8_t TEMPERATURE_FAHRENHEIT_REG{0X04};
237constexpr uint8_t INTERNAL_TEMPERATURE_CELSIUS_REG{0X10};
238constexpr uint8_t INTERNAL_TEMPERATURE_FAHRENHEIT_REG{0X14};
239constexpr uint8_t STATUS_REG{0x20};
240constexpr uint8_t TEMPERATURE_CELSIUS_STRING_REG{0x30};
241constexpr uint8_t TEMPERATURE_FAHRENHEIT_STRING_REG{0x40};
242constexpr uint8_t INTERNAL_TEMPERATURE_CELSIUS_STRING_REG{0x50};
243constexpr uint8_t INTERNAL_TEMPERATURE_FAHRENHEIT_STRING_REG{0x60};
244constexpr uint8_t FIRMWARE_VERSION_REG{0xFE};
245constexpr uint8_t I2C_ADDRESS_REG{0xFF};
bool readFirmwareVersion(uint8_t &ver)
Read firmware version.
Definition unit_KmeterISO.cpp:109
bool measureSingleshot(kmeter_iso::Data &d, const kmeter_iso::MeasurementUnit munit=kmeter_iso::MeasurementUnit::Celsius, const uint32_t timeoutMs=100)
Measure temperature single shot.
Definition unit_KmeterISO.cpp:114
bool readI2CAddress(uint8_t &i2c_address)
Read device I2C address.
Definition unit_KmeterISO.cpp:179
void setMeasurementUnit(const kmeter_iso::MeasurementUnit munit)
Definition unit_KmeterISO.hpp:106
bool stopPeriodicMeasurement()
Stop periodic measurement.
Definition unit_KmeterISO.hpp:146
bool measureInternalSingleshot(kmeter_iso::Data &d, const kmeter_iso::MeasurementUnit munit=kmeter_iso::MeasurementUnit::Celsius, const uint32_t timeoutMs=100)
Measure internal temperature single shot.
Definition unit_KmeterISO.cpp:134
bool readStatus(uint8_t &status)
Read status.
Definition unit_KmeterISO.cpp:103
kmeter_iso::MeasurementUnit measurementUnit() const
Definition unit_KmeterISO.hpp:101
bool startPeriodicMeasurement()
Start periodic measurement in the current settings.
Definition unit_KmeterISO.hpp:127
bool changeI2CAddress(const uint8_t i2c_address)
Change device I2C address.
Definition unit_KmeterISO.cpp:154
bool startPeriodicMeasurement(const uint32_t interval, const kmeter_iso::MeasurementUnit munit=kmeter_iso::MeasurementUnit::Celsius)
Start periodic measurement.
Definition unit_KmeterISO.hpp:137
config_t config()
Gets the configration.
Definition unit_KmeterISO.hpp:87
void config(const config_t &cfg)
Set the configration.
Definition unit_KmeterISO.hpp:92
float temperature() const
Oldest temperature.
Definition unit_KmeterISO.hpp:115
Top level namespace of M5stack.
Settings for begin.
Definition unit_KmeterISO.hpp:61
uint32_t interval
periodic interval(ms) if start on begin
Definition unit_KmeterISO.hpp:65
bool start_periodic
Start periodic measurement on begin?
Definition unit_KmeterISO.hpp:63
kmeter_iso::MeasurementUnit measurement_unit
//!< measurement unit if start on begin
Definition unit_KmeterISO.hpp:67
Measurement data group.
Definition unit_ADS111x.hpp:204
Measurement data group.
Definition unit_KmeterISO.hpp:36
std::array< uint8_t, 4 > raw
Raw data.
Definition unit_KmeterISO.hpp:37
MeasurementUnit
measurement unit on periodic measurement
Definition unit_KmeterISO.hpp:27