13#ifndef M5_UNIT_LIGHT_UNIT_BH1750FVI_HPP
14#define M5_UNIT_LIGHT_UNIT_BH1750FVI_HPP
16#include <M5UnitComponent.hpp>
17#include <m5_utility/stl/extension.hpp>
18#include <m5_utility/container/circular_buffer.hpp>
31constexpr uint8_t POWER_DOWN{0x00};
32constexpr uint8_t POWER_ON{0x01};
33constexpr uint8_t RESET{0x07};
36constexpr uint8_t CONTINUOUS_H_RES_MODE{0x10};
37constexpr uint8_t CONTINUOUS_H_RES_MODE2{0x11};
38constexpr uint8_t CONTINUOUS_L_RES_MODE{0x13};
41constexpr uint8_t ONE_TIME_H_RES_MODE{0x20};
42constexpr uint8_t ONE_TIME_H_RES_MODE2{0x21};
43constexpr uint8_t ONE_TIME_L_RES_MODE{0x23};
46constexpr uint8_t CHANGE_MEASUREMENT_TIME_HIGH{0x40};
47constexpr uint8_t CHANGE_MEASUREMENT_TIME_LOW{0x60};
58class UnitBH1750FVI :
public Component,
public PeriodicMeasurementAdapter<UnitBH1750FVI, bh1750fvi::Data> {
75 uint8_t
mtreg{bh1750fvi::MTREG_DEFAULT};
81 : Component(addr), _data{new
m5::container::CircularBuffer<
bh1750fvi::Data>(1)}
83 auto ccfg = component_config();
84 ccfg.clock = 400 * 1000U;
86 component_config(ccfg);
95 virtual bool begin()
override;
98 virtual void update(
const bool force =
false)
override;
122 return !empty() ? latest().lux() : std::numeric_limits<float>::quiet_NaN();
126 inline uint16_t
raw()
const
128 return !empty() ? latest().raw : 0;
152 return PeriodicMeasurementAdapter<UnitBH1750FVI, bh1750fvi::Data>::startPeriodicMeasurement();
162 return PeriodicMeasurementAdapter<UnitBH1750FVI, bh1750fvi::Data>::startPeriodicMeasurement(
resolution,
mtreg);
170 return PeriodicMeasurementAdapter<UnitBH1750FVI, bh1750fvi::Data>::stopPeriodicMeasurement();
185 const uint8_t
mtreg = bh1750fvi::MTREG_DEFAULT);
227 bool start_periodic_measurement();
229 bool stop_periodic_measurement();
232 bool write_opcode(
const uint8_t opcode);
233 bool write_mtreg_opcodes(
const uint8_t
mtreg);
241 std::unique_ptr<m5::container::CircularBuffer<bh1750fvi::Data>> _data{};
243 bh1750fvi::Resolution _resolution{bh1750fvi::Resolution::High};
244 uint8_t _mtreg{bh1750fvi::MTREG_DEFAULT};
Digital ambient light sensor.
virtual ~UnitBH1750FVI()
Destructor.
Definition unit_BH1750FVI.hpp:89
UnitBH1750FVI(const uint8_t addr=DEFAULT_ADDRESS)
Constructor.
Definition unit_BH1750FVI.hpp:80
bool startPeriodicMeasurement(const bh1750fvi::Resolution resolution, const uint8_t mtreg)
Start periodic measurement.
Definition unit_BH1750FVI.hpp:160
void config(const config_t &cfg)
Set the configuration.
Definition unit_BH1750FVI.hpp:110
virtual void update(const bool force=false) override
Update the unit.
Definition unit_BH1750FVI.cpp:102
bool startPeriodicMeasurement()
Start periodic measurement in the current settings.
Definition unit_BH1750FVI.hpp:150
static constexpr uint8_t ALT_ADDRESS
Alternate I2C address when ADDR pin is tied high.
Definition unit_BH1750FVI.hpp:63
bool writeMTreg(const uint8_t mtreg)
Write MTreg as raw value (31..254)
Definition unit_BH1750FVI.cpp:155
uint8_t mtreg() const
MTreg currently in effect.
Definition unit_BH1750FVI.hpp:138
uint8_t readMTreg() const
Gets the current MTreg cache.
Definition unit_BH1750FVI.hpp:207
virtual bool begin() override
Begin the unit.
Definition unit_BH1750FVI.cpp:50
uint16_t raw() const
Latest raw value.
Definition unit_BH1750FVI.hpp:126
bool writeSensitivityFactor(const float factor)
Write MTreg as sensitivity factor (0.45..3.68)
Definition unit_BH1750FVI.cpp:181
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:118
float lux() const
Latest illuminance (lx)
Definition unit_BH1750FVI.hpp:120
bh1750fvi::Resolution resolution() const
Resolution currently in effect.
Definition unit_BH1750FVI.hpp:132
bool powerOn()
Write POWER_ON opcode.
Definition unit_BH1750FVI.cpp:194
bool powerDown()
Write POWER_DOWN opcode.
Definition unit_BH1750FVI.cpp:199
bool stopPeriodicMeasurement()
Stop periodic measurement.
Definition unit_BH1750FVI.hpp:168
bool softReset()
Write RESET opcode (clears data register; requires POWER_ON state)
Definition unit_BH1750FVI.cpp:210
config_t config() const
Gets the configuration.
Definition unit_BH1750FVI.hpp:104
Top level namespace of M5Stack.
Settings for begin.
Definition unit_BH1750FVI.hpp:69
bh1750fvi::Resolution resolution
Resolution if start on begin.
Definition unit_BH1750FVI.hpp:73
uint8_t mtreg
MTreg if start on begin (31..254, default 69)
Definition unit_BH1750FVI.hpp:75
bool start_periodic
Start periodic measurement on begin? (true: Continuous mode, false: standby for one-time/manual contr...
Definition unit_BH1750FVI.hpp:71
Measurement data group.
Definition unit_BH1750FVI_data.hpp:65
BH1750FVI data types (enums, constants, Data struct)
Resolution
Resolution of the measurement.
Definition unit_BH1750FVI_data.hpp:43
Mode
Measurement mode.
Definition unit_BH1750FVI_data.hpp:33