13#ifndef M5_UNIT_LIGHT_UNIT_BH1750FVI_HPP
14#define M5_UNIT_LIGHT_UNIT_BH1750FVI_HPP
20#include <M5UnitComponent.hpp>
21#include <m5_utility/container/circular_buffer.hpp>
33constexpr uint8_t POWER_DOWN{0x00};
34constexpr uint8_t POWER_ON{0x01};
35constexpr uint8_t RESET{0x07};
38constexpr uint8_t CONTINUOUS_H_RES_MODE{0x10};
39constexpr uint8_t CONTINUOUS_H_RES_MODE2{0x11};
40constexpr uint8_t CONTINUOUS_L_RES_MODE{0x13};
43constexpr uint8_t ONE_TIME_H_RES_MODE{0x20};
44constexpr uint8_t ONE_TIME_H_RES_MODE2{0x21};
45constexpr uint8_t ONE_TIME_L_RES_MODE{0x23};
48constexpr uint8_t CHANGE_MEASUREMENT_TIME_HIGH{0x40};
49constexpr uint8_t CHANGE_MEASUREMENT_TIME_LOW{0x60};
60class UnitBH1750FVI :
public Component,
public PeriodicMeasurementAdapter<UnitBH1750FVI, bh1750fvi::Data> {
77 uint8_t
mtreg{bh1750fvi::MTREG_DEFAULT};
83 : Component(addr), _data{new
m5::container::CircularBuffer<
bh1750fvi::Data>(1)}
85 auto ccfg = component_config();
86 ccfg.clock = 400 * 1000U;
88 component_config(ccfg);
97 virtual bool begin()
override;
100 virtual void update(
const bool force =
false)
override;
124 return !empty() ? latest().lux() : std::numeric_limits<float>::quiet_NaN();
128 inline uint16_t
raw()
const
130 return !empty() ? latest().raw : 0;
160 return PeriodicMeasurementAdapter<UnitBH1750FVI, bh1750fvi::Data>::startPeriodicMeasurement();
172 return PeriodicMeasurementAdapter<UnitBH1750FVI, bh1750fvi::Data>::startPeriodicMeasurement(
resolution,
mtreg);
180 return PeriodicMeasurementAdapter<UnitBH1750FVI, bh1750fvi::Data>::stopPeriodicMeasurement();
197 const uint8_t
mtreg = bh1750fvi::MTREG_DEFAULT);
220 [[deprecated(
"Use mtreg() instead")]]
inline uint8_t
readMTreg()
const
241 bool start_periodic_measurement();
243 bool stop_periodic_measurement();
246 bool write_opcode(
const uint8_t opcode);
247 bool write_mtreg_opcodes(
const uint8_t
mtreg);
255 std::unique_ptr<m5::container::CircularBuffer<bh1750fvi::Data>> _data{};
257 bh1750fvi::Resolution _resolution{bh1750fvi::Resolution::High};
258 uint8_t _mtreg{bh1750fvi::MTREG_DEFAULT};
Digital ambient light sensor.
virtual ~UnitBH1750FVI()
Destructor.
Definition unit_BH1750FVI.hpp:91
UnitBH1750FVI(const uint8_t addr=DEFAULT_ADDRESS)
Constructor.
Definition unit_BH1750FVI.hpp:82
bool startPeriodicMeasurement(const bh1750fvi::Resolution resolution, const uint8_t mtreg)
Start periodic measurement.
Definition unit_BH1750FVI.hpp:170
void config(const config_t &cfg)
Set the configuration.
Definition unit_BH1750FVI.hpp:112
virtual void update(const bool force=false) override
Update the unit.
Definition unit_BH1750FVI.cpp:101
bool startPeriodicMeasurement()
Start periodic measurement with the resolution / mtreg of config()
Definition unit_BH1750FVI.hpp:158
static constexpr uint8_t ALT_ADDRESS
Alternate I2C address when ADDR pin is tied high.
Definition unit_BH1750FVI.hpp:65
bool writeMTreg(const uint8_t mtreg)
Write MTreg as raw value (31..254)
Definition unit_BH1750FVI.cpp:154
uint8_t mtreg() const
MTreg currently in effect.
Definition unit_BH1750FVI.hpp:144
uint8_t readMTreg() const
Gets the current MTreg cache.
Definition unit_BH1750FVI.hpp:220
virtual bool begin() override
Begin the unit.
Definition unit_BH1750FVI.cpp:51
uint16_t raw() const
Latest raw value.
Definition unit_BH1750FVI.hpp:128
bool writeSensitivityFactor(const float factor)
Write MTreg as sensitivity factor (0.45..3.68)
Definition unit_BH1750FVI.cpp:180
bool measureSingleShot(bh1750fvi::Data &data, const bh1750fvi::Resolution resolution=bh1750fvi::Resolution::High, const uint8_t mtreg=bh1750fvi::MTREG_DEFAULT)
Measure single-shot.
Definition unit_BH1750FVI.cpp:117
float lux() const
Latest illuminance (lx)
Definition unit_BH1750FVI.hpp:122
bh1750fvi::Resolution resolution() const
Resolution currently in effect.
Definition unit_BH1750FVI.hpp:138
bool powerOn()
Write POWER_ON opcode.
Definition unit_BH1750FVI.cpp:191
bool powerDown()
Write POWER_DOWN opcode.
Definition unit_BH1750FVI.cpp:196
bool stopPeriodicMeasurement()
Stop periodic measurement.
Definition unit_BH1750FVI.hpp:178
bool softReset()
Write RESET opcode (clears data register; requires POWER_ON state)
Definition unit_BH1750FVI.cpp:207
config_t config() const
Gets the configuration.
Definition unit_BH1750FVI.hpp:106
Top level namespace of M5Stack.
Settings for begin.
Definition unit_BH1750FVI.hpp:71
bh1750fvi::Resolution resolution
Resolution if start on begin.
Definition unit_BH1750FVI.hpp:75
uint8_t mtreg
MTreg if start on begin (31..254, default 69)
Definition unit_BH1750FVI.hpp:77
bool start_periodic
Start periodic measurement on begin? (true: Continuous mode, false: standby for one-time/manual contr...
Definition unit_BH1750FVI.hpp:73
Measurement data group.
Definition unit_BH1750FVI_data.hpp:63
BH1750FVI data types (enums, constants, Data struct)
Resolution
Resolution of the measurement.
Definition unit_BH1750FVI_data.hpp:41
Mode
Measurement mode.
Definition unit_BH1750FVI_data.hpp:31