13#ifndef M5_UNIT_LIGHT_UNIT_LIGHT_HPP
14#define M5_UNIT_LIGHT_UNIT_LIGHT_HPP
16#include <M5UnitComponent.hpp>
17#include <m5_utility/stl/extension.hpp>
18#include <m5_utility/container/circular_buffer.hpp>
30class UnitLight :
public Component,
public PeriodicMeasurementAdapter<UnitLight, light::Data> {
31 M5_UNIT_COMPONENT_HPP_BUILDER(
UnitLight, 0x00);
51 explicit UnitLight(
const uint8_t addr = DEFAULT_ADDRESS)
52 : Component(addr), _data{new
m5::container::CircularBuffer<
light::Data>(1)}
54 auto ccfg = component_config();
56 component_config(ccfg);
65 virtual bool begin()
override;
68 virtual void update(
const bool force =
false)
override;
96 return !empty() ? latest().analog_raw : 0;
103 return !empty() ? latest().digital :
false;
112 if (empty())
return std::numeric_limits<float>::quiet_NaN();
126 return PeriodicMeasurementAdapter<UnitLight, light::Data>::startPeriodicMeasurement();
135 return PeriodicMeasurementAdapter<UnitLight, light::Data>::startPeriodicMeasurement(interval_ms);
141 return PeriodicMeasurementAdapter<UnitLight, light::Data>::stopPeriodicMeasurement();
179 bool start_periodic_measurement();
180 bool start_periodic_measurement(
const uint32_t interval_ms);
181 bool stop_periodic_measurement();
188 std::unique_ptr<m5::container::CircularBuffer<light::Data>> _data{};
191 uint16_t _bright{4095};
Analog light-level detector with a comparator threshold output (U021)
uint16_t analog() const
Latest analog raw value.
Definition unit_Light.hpp:94
bool stopPeriodicMeasurement()
Stop periodic measurement.
Definition unit_Light.hpp:139
bool startPeriodicMeasurement()
Start periodic measurement in the current settings.
Definition unit_Light.hpp:124
void setCalibration(const uint16_t dark, const uint16_t bright)
Set dark/bright references explicitly.
Definition unit_Light.cpp:98
config_t config() const
Gets the configuration.
Definition unit_Light.hpp:74
virtual ~UnitLight()
Destructor.
Definition unit_Light.hpp:59
UnitLight(const uint8_t addr=DEFAULT_ADDRESS)
Constructor.
Definition unit_Light.hpp:51
uint16_t dark() const
Current dark reference.
Definition unit_Light.hpp:166
bool startPeriodicMeasurement(const uint32_t interval_ms)
Start periodic measurement.
Definition unit_Light.hpp:133
virtual void update(const bool force=false) override
Update the unit.
Definition unit_Light.cpp:62
virtual bool begin() override
Begin the unit (configures RX as analog input, TX as digital input)
Definition unit_Light.cpp:28
void resetCalibration()
Reset calibration (dark=0, bright=4095)
Definition unit_Light.cpp:104
bool calibrateDark()
Record the current analog reading as the dark reference.
Definition unit_Light.cpp:78
bool digital() const
Latest digital threshold output.
Definition unit_Light.hpp:101
bool calibrateBright()
Record the current analog reading as the bright reference.
Definition unit_Light.cpp:88
float normalized() const
Latest normalized light level (0..100), recomputed against the current calibration.
Definition unit_Light.hpp:110
void config(const config_t &cfg)
Set the configuration.
Definition unit_Light.hpp:80
uint16_t bright() const
Current bright reference.
Definition unit_Light.hpp:172
Top level namespace of M5Stack.
Settings for begin.
Definition unit_Light.hpp:38
bool start_periodic
Start periodic measurement on begin?
Definition unit_Light.hpp:40
uint32_t interval_ms
Sampling interval in milliseconds.
Definition unit_Light.hpp:42
uint16_t dark
Dark reference used for normalization (default 0)
Definition unit_Light.hpp:44
uint16_t bright
Bright reference used for normalization (default 4095 for 12-bit ADC)
Definition unit_Light.hpp:46
Measurement data group.
Definition unit_Light_data.hpp:33
float normalized() const
Normalized brightness in 0..100 (%), where 0% = dark reference and 100% = bright reference.
Definition unit_Light_data.hpp:47
uint16_t bright
ADC reading captured when the sensor was lit (bright reference)
Definition unit_Light_data.hpp:37
uint16_t dark
ADC reading captured when the sensor was covered (dark reference)
Definition unit_Light_data.hpp:36
UnitLight (SKU:U021) data types (Data struct)