69void TCS34725Component::calculate_temperature_and_lux_(uint16_t r, uint16_t g, uint16_t b, uint16_t c) {
185 ESP_LOGW(TAG,
"Error reading TCS34725 sensor data");
190 uint16_t raw_c = data[0];
191 uint16_t raw_r = data[1];
192 uint16_t raw_g = data[2];
193 uint16_t raw_b = data[3];
195 ESP_LOGV(TAG,
"Raw values clear=%d red=%d green=%d blue=%d", raw_c, raw_r, raw_g, raw_b);
203 channel_c = channel_r = channel_g = channel_b = 0.0f;
207 channel_r = raw_r / sum * 100.0f;
208 channel_g = raw_g / sum * 100.0f;
209 channel_b = raw_b / sum * 100.0f;
210 channel_c = raw_c / max_count * 100.0f;
223 calculate_temperature_and_lux_(raw_r, raw_g, raw_b, raw_c);
240 "Got Red=%.1f%%,Green=%.1f%%,Blue=%.1f%%,Clear=%.1f%% Illuminance=%.1flx Color "
247 float integration_time_ideal;
249 integration_time_ideal = 60 / ((float) std::max((uint16_t) 1, raw_c) / 655.35f) * this->
integration_time_;
251 uint8_t gain_reg_val_new = this->gain_reg_;
255 if (this->gain_reg_ < 3) {
257 gain_reg_val_new = this->gain_reg_ + 1;
259 integration_time_ideal = integration_time_ideal / 4;
264 if (this->gain_reg_ > 0) {
266 gain_reg_val_new = this->gain_reg_ - 1;
268 integration_time_ideal = integration_time_ideal * 4;
273 float integration_time_next = integration_time_ideal;
274 if (integration_time_ideal > 2.4f * 256) {
275 integration_time_next = 2.4f * 256;
277 if (integration_time_ideal < 154) {
278 integration_time_next = 154;
282 uint8_t regval_atime = (uint8_t) (256.f - integration_time_next / 2.4f);
283 ESP_LOGD(TAG,
"Integration time: %.1fms, ideal: %.1fms regval_new %d Gain: %.f Clear channel raw: %d gain reg: %d",
286 if (this->integration_reg_ != regval_atime || gain_reg_val_new != this->gain_reg_) {
287 this->integration_reg_ = regval_atime;
288 this->gain_reg_ = gain_reg_val_new;
293 ESP_LOGW(TAG,
"TCS34725I update timing failed!");