From b548ea69845af7394c509a8d982263f6e8134f36 Mon Sep 17 00:00:00 2001 From: Sam Redfern Date: Mon, 5 May 2025 22:50:17 +1000 Subject: [PATCH] Changes --- components/sen0590/sen0590.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/components/sen0590/sen0590.cpp b/components/sen0590/sen0590.cpp index 5c5acc5..338fbad 100644 --- a/components/sen0590/sen0590.cpp +++ b/components/sen0590/sen0590.cpp @@ -9,14 +9,14 @@ namespace esphome { namespace sen0590 { static const char *const TAG = "sen0590"; -static const uint8_t COMMAND_REG = 0x00; -static const uint8_t DATA_REG_HIGH = 0x01; -static const uint8_t DATA_REG_LOW = 0x02; +static const uint8_t COMMAND_REG = 0x10; +static const uint8_t DATA_REG = 0x02; static const uint8_t MEASURE_COMMAND = 0xB0; void SEN0590Component::setup() { ESP_LOGD(TAG, "Setting up SEN0590 laser distance sensor..."); - if (!this->write_byte(COMMAND_REG, 0x00)) { + uint8_t temp_buffer; + if (this->read_register(DATA_REG, &temp_buffer, 1) != i2c::ERROR_OK) { ESP_LOGE(TAG, "SEN0590 not responding. Check wiring and address."); this->mark_failed(); return; @@ -26,7 +26,7 @@ void SEN0590Component::setup() { void SEN0590Component::update() { if (!this->write_byte(COMMAND_REG, MEASURE_COMMAND)) { - ESP_LOGW(TAG, "Failed to send measurement command"); + ESP_LOGW(TAG, "Failed to send measurement command to reg 0x%02X", COMMAND_REG); this->status_set_warning(); return; } @@ -34,16 +34,17 @@ void SEN0590Component::update() { delay(50); uint8_t buffer[2]; - if (this->read_register(DATA_REG_HIGH, &buffer[0], 1) != i2c::ERROR_OK || - this->read_register(DATA_REG_LOW, &buffer[1], 1) != i2c::ERROR_OK) { - ESP_LOGW(TAG, "Failed to read distance data"); + if (this->read_register(DATA_REG, buffer, 2) != i2c::ERROR_OK) { + ESP_LOGW(TAG, "Failed to read distance data from reg 0x%02X", DATA_REG); this->status_set_warning(); return; } - int distance_mm = (buffer[0] << 8) | buffer[1]; - if (distance_mm == 0xFFFF) { - ESP_LOGW(TAG, "Received invalid distance data (0xFFFF)"); + int distance_mm = ((buffer[0] << 8) | buffer[1]) + 10; + + if (((buffer[0] << 8) | buffer[1]) == 0xFFFF) { + ESP_LOGW(TAG, "Received invalid distance data (raw 0xFFFF)"); + this->publish_state(NAN); this->status_set_warning(); return; }