13#ifndef M5_UNIT_THERMO_UNIT_MLX90614_DATA_HPP
14#define M5_UNIT_THERMO_UNIT_MLX90614_DATA_HPP
21#include <m5_utility/stl/extension.hpp>
47enum class IIR : uint8_t {
62enum class FIR : uint8_t {
103 std::array<uint16_t, 3>
raw{};
108 return ((
raw[0] & 0x8000) == 0) ?
raw[0] * 0.02f : std::numeric_limits<float>::quiet_NaN();
129 return ((
raw[1] & 0x8000) == 0) ?
raw[1] * 0.02f : std::numeric_limits<float>::quiet_NaN();
150 return ((
raw[2] & 0x8000) == 0) ?
raw[2] * 0.02f : std::numeric_limits<float>::quiet_NaN();
198 return static_cast<IIR>(
value & 0x07);
210 return static_cast<FIR>((
value >> 8) & 0x07);
216 const uint8_t g = (
value >> 11) & 0x07;
217 return static_cast<Gain>(g > 6 ? 6 : g);
229 return !(
value & (1U << 7));
235 return !(
value & (1U << 14));
242 value =
static_cast<uint16_t
>((
value & ~0x07) | m5::stl::to_underlying(
iir));
248 value =
static_cast<uint16_t
>((
value & ~(0x03 << 4)) | (m5::stl::to_underlying(o) << 4));
254 value =
static_cast<uint16_t
>((
value & ~(0x07 << 8)) | (m5::stl::to_underlying(
fir) << 8));
260 value =
static_cast<uint16_t
>((
value & ~(0x07 << 11)) | (m5::stl::to_underlying(
gain) << 11));
266 value =
static_cast<uint16_t
>((
value & ~(1U << 6)) | (
static_cast<unsigned>(m5::stl::to_underlying(irs)) << 6));
272 value =
static_cast<uint16_t
>((
value & ~(1U << 7)) | (
static_cast<unsigned>(!pos) << 7));
278 value =
static_cast<uint16_t
>((
value & ~(1U << 14)) | (
static_cast<unsigned>(!pos) << 14));
290 return t * 0.01f - 273.15f;
300 const float v{std::fmax(std::fmin(c, 382.2f), -273.15f)};
301 return static_cast<uint16_t
>(100 * (v + 0.005f + 273.15f));
311 return t * 64.0f / 100.f - 38.2f;
321 const float v{std::fmax(std::fmin(c, 125.f), -38.2f)};
322 return static_cast<uint8_t
>(100 * (v + 0.32f + 38.2f) / 64.0f);
342 return static_cast<uint16_t
>(std::round(65535.f * e));
Top level namespace of M5stack.
Config Register1 (EEPROM 0x05, command 0x25) bit fields.
Definition unit_MLX90614_data.hpp:188
void gain(const Gain gain)
Sets the amplifier gain (bits 13:11)
Definition unit_MLX90614_data.hpp:258
ConfigRegister(const uint16_t v=0)
Constructor.
Definition unit_MLX90614_data.hpp:191
Gain gain() const
Gets the amplifier gain (bits 13:11)
Definition unit_MLX90614_data.hpp:214
void fir(const FIR fir)
Sets the FIR filter (bits 10:8)
Definition unit_MLX90614_data.hpp:252
FIR fir() const
Gets the FIR filter (bits 10:8)
Definition unit_MLX90614_data.hpp:208
uint16_t value
Raw register value.
Definition unit_MLX90614_data.hpp:280
void irSensor(const IRSensor irs)
Sets the IR sensor mode (bit 6)
Definition unit_MLX90614_data.hpp:264
bool positiveKt2() const
Gets the sign of Kt2 (bit 14)
Definition unit_MLX90614_data.hpp:233
void iir(const IIR iir)
Sets the IIR filter (bits 2:0)
Definition unit_MLX90614_data.hpp:240
IIR iir() const
Gets the IIR filter (bits 2:0)
Definition unit_MLX90614_data.hpp:196
void output(const Output o)
Sets the PWM output mode (bits 5:4)
Definition unit_MLX90614_data.hpp:246
void positiveKs(const bool pos)
Sets the sign of Ks (bit 7)
Definition unit_MLX90614_data.hpp:270
void positiveKt2(const bool pos)
Sets the sign of Kt2 (bit 14)
Definition unit_MLX90614_data.hpp:276
bool positiveKs() const
Gets the sign of Ks (bit 7)
Definition unit_MLX90614_data.hpp:227
Output output() const
Gets the PWM output mode (bits 5:4)
Definition unit_MLX90614_data.hpp:202
IRSensor irSensor() const
Gets the IR sensor mode (bit 6)
Definition unit_MLX90614_data.hpp:221
Measurement data group.
Definition unit_MLX90614_data.hpp:102
float ambientTemperature() const
Gets ambient temperature in Celsius (alias of ambientCelsius)
Definition unit_MLX90614_data.hpp:111
float objectFahrenheit2() const
Gets object2 temperature in Fahrenheit (dual zone only, NaN on single zone)
Definition unit_MLX90614_data.hpp:163
float ambientKelvin() const
Gets ambient temperature in Kelvin.
Definition unit_MLX90614_data.hpp:106
float objectKelvin2() const
Gets object2 temperature in Kelvin (dual zone only, NaN on single zone)
Definition unit_MLX90614_data.hpp:148
float objectTemperature1() const
Gets object1 temperature in Celsius (alias of objectCelsius1)
Definition unit_MLX90614_data.hpp:132
float objectTemperature2() const
Gets object2 temperature in Celsius (alias of objectCelsius2)
Definition unit_MLX90614_data.hpp:153
float objectFahrenheit1() const
Gets object1 temperature in Fahrenheit.
Definition unit_MLX90614_data.hpp:142
float objectCelsius1() const
Gets object1 temperature in Celsius.
Definition unit_MLX90614_data.hpp:137
float objectKelvin1() const
Gets object1 temperature in Kelvin.
Definition unit_MLX90614_data.hpp:127
float ambientCelsius() const
Gets ambient temperature in Celsius.
Definition unit_MLX90614_data.hpp:116
float ambientFahrenheit() const
Gets ambient temperature in Fahrenheit.
Definition unit_MLX90614_data.hpp:121
float objectCelsius2() const
Gets object2 temperature in Celsius (dual zone only, NaN on single zone)
Definition unit_MLX90614_data.hpp:158
std::array< uint16_t, 3 > raw
Linearized raw [0]:Ambient [1]:Object1 [2]:Object2.
Definition unit_MLX90614_data.hpp:103
EEPROM structure values.
Definition unit_MLX90614_data.hpp:173
uint16_t pwmCtrl
Pulse Width Modulation control.
Definition unit_MLX90614_data.hpp:176
uint16_t addr
I2C address(Using low byte)
Definition unit_MLX90614_data.hpp:180
uint16_t config
Configuration.
Definition unit_MLX90614_data.hpp:179
uint16_t toMin
Min of the Object Temperature.
Definition unit_MLX90614_data.hpp:175
uint16_t taRange
Range of the Ambient Temperature (H/L)
Definition unit_MLX90614_data.hpp:177
uint16_t toMax
Max of the Object Temperature.
Definition unit_MLX90614_data.hpp:174
uint16_t emissivity
Emissivity.
Definition unit_MLX90614_data.hpp:178
float taRaw_to_celsius(const uint8_t t)
Ambient temperature range raw (one byte of TaRange) to Celsius.
Definition unit_MLX90614_data.hpp:309
IRSensor
Infra-Red Sensor mode.
Definition unit_MLX90614_data.hpp:93
@ Single
Single IR Sensor.
IIR
Infinite Impulse Response.
Definition unit_MLX90614_data.hpp:47
@ Filter25
25% (a1 = 0.25, b1 = 0.75)
@ Filter50
50% (a1 = 0.5, b1 = 0.5)
@ Filter67
67% (a1 = 0.666, b1 = 0.333)
@ Filter80
80% (a1 = 0.8, b1 = 0.2)
@ Filter13
13% (a1 = 0.125, b1 = 0.875)
@ Filter100
100% (a1 = 1, b1 = 0)
@ Filter57
57% (a1 = 0.571, b1 = 0.428)
@ Filter17
17% (a1 = 0.166(6), b1 = 0.833(3))
uint16_t celsius_to_toRaw(const float c)
Celsius to object temperature range raw (ToMin / ToMax)
Definition unit_MLX90614_data.hpp:298
uint8_t celsius_to_taRaw(const float c)
Celsius to ambient temperature range raw (one byte of TaRange)
Definition unit_MLX90614_data.hpp:319
uint16_t emissivity_to_raw(const float e)
Emissivity to emissivity raw.
Definition unit_MLX90614_data.hpp:340
float raw_to_emissivity(const uint16_t e)
Emissivity raw to emissivity.
Definition unit_MLX90614_data.hpp:330
Gain
Amplifier gain.
Definition unit_MLX90614_data.hpp:78
FIR
Finite Impulse Response.
Definition unit_MLX90614_data.hpp:62
@ Filter8
8 Not recommended
@ Filter32
32 Not recommended
@ Filter16
16 Not recommended
@ Filter64
64 Not recommended
Output
PWM output mode.
Definition unit_MLX90614_data.hpp:36
@ TO1_TO2
PWM1: To1 PWM2:To2 (Object 1 & 2)
@ TA_TO1
PWM1: Ta PWM2:To1 (Ambient & Object 1)
@ TA_TO2
PWM1: Ta PWM2:To2 (Ambient & Object 2)
@ TO2_Undefined
PWM1: To2 PWM2:Undefined (Object 2)
float toRaw_to_celsius(const uint16_t t)
Object temperature range raw (ToMin / ToMax) to Celsius.
Definition unit_MLX90614_data.hpp:288