7static const char *
const TAG =
"veml3235.sensor";
10 uint8_t device_id[] = {0, 0};
12 ESP_LOGE(TAG,
"Unable to write configuration");
17 ESP_LOGE(TAG,
"Unable to read ID");
19 }
else if (device_id[0] != DEVICE_ID) {
20 ESP_LOGE(TAG,
"Incorrect device ID - expected 0x%.2x, read 0x%.2x", DEVICE_ID, device_id[0]);
26 uint16_t data = this->
power_on_ || force_on ? 0 : SHUTDOWN_BITS;
30 data |= (uint16_t(this->
gain_ << CONFIG_REG_G_BIT));
33 ESP_LOGVV(TAG,
"Writing 0x%.4x to register 0x%.2x", data, CONFIG_REG);
40 ESP_LOGW(TAG,
"Turning on failed");
48 uint8_t als_regs[] = {0, 0};
56 float als_raw_value_multiplier = LUX_MULTIPLIER_BASE;
57 uint16_t als_raw_value =
encode_uint16(als_regs[1], als_regs[0]);
60 als_raw_value_multiplier *= 2;
62 switch (this->
gain_) {
64 als_raw_value_multiplier *= 4;
67 als_raw_value_multiplier *= 2;
74 als_raw_value_multiplier *= 16;
77 als_raw_value_multiplier *= 8;
80 als_raw_value_multiplier *= 4;
83 als_raw_value_multiplier *= 2;
89 float lx = float(als_raw_value) * als_raw_value_multiplier;
90 ESP_LOGVV(TAG,
"'%s': ALS raw = %u, multiplier = %.5f", this->
get_name().c_str(), als_raw_value,
91 als_raw_value_multiplier);
92 ESP_LOGD(TAG,
"'%s': Illuminance = %.4flx", this->
get_name().c_str(), lx);
96 ESP_LOGW(TAG,
"Turning off failed");
114 if (als_raw_value >= UINT16_MAX * 0.9) {
123 switch (this->
gain_) {
176 switch (this->
gain_) {
188 integration_time = 50;
206 LOG_SENSOR(
"",
"VEML3235",
this);
207 LOG_I2C_DEVICE(
this);
209 ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
211 LOG_UPDATE_INTERVAL(
this);
212 ESP_LOGCONFIG(TAG,
" Auto-gain enabled: %s", YESNO(this->
auto_gain_));
215 " Auto-gain upper threshold: %f%%\n"
216 " Auto-gain lower threshold: %f%%\n"
217 " Values below will be used as initial values only",
221 " Digital gain: %uX\n"
223 " Integration time: %ums",
void mark_failed()
Mark this component as failed.
void status_set_warning()
void status_clear_warning()
const StringRef & get_name() const
ErrorCode read_register(uint8_t a_register, uint8_t *data, size_t len)
reads an array of bytes from a specific register in the I²C device
bool write_byte_16(uint8_t a_register, uint16_t data) const
VEML3235ComponentIntegrationTime integration_time_
float auto_gain_threshold_high_
float auto_gain_threshold_low_
VEML3235ComponentGain gain()
void adjust_gain_(uint16_t als_raw_value)
VEML3235ComponentIntegrationTime integration_time()
VEML3235ComponentGain gain_
void dump_config() override
VEML3235ComponentDigitalGain digital_gain()
VEML3235ComponentDigitalGain digital_gain_
bool refresh_config_reg(bool force_on=false)
@ ERROR_OK
No error found during execution of method.
@ VEML3235_DIGITAL_GAIN_2X
@ VEML3235_DIGITAL_GAIN_1X
@ VEML3235_INTEGRATION_TIME_100MS
@ VEML3235_INTEGRATION_TIME_200MS
@ VEML3235_INTEGRATION_TIME_50MS
@ VEML3235_INTEGRATION_TIME_800MS
@ VEML3235_INTEGRATION_TIME_400MS
constexpr uint16_t encode_uint16(uint8_t msb, uint8_t lsb)
Encode a 16-bit value given the most and least significant byte.
void HOT delay(uint32_t ms)