From 2c72c42275fa06bb645cfad902e1695e305d1a1d Mon Sep 17 00:00:00 2001 From: Alexandr Date: Tue, 29 Sep 2026 10:41:29 +0400 Subject: [PATCH] =?UTF-8?q?display:=20fix=20freezing=20below=20-9.9=20?= =?UTF-8?q?=C2=B0C=20and=20at=20100=20%=20humidity,=20add=20missing=20lead?= =?UTF-8?q?ing=20zero=20at=20x.9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Below -9.9 °C (or °F) the value does not fit the big number with a decimal point, so show_big_number() returned early and the LCD kept the last value. Show whole degrees instead (e.g. -15). - At 100 % humidity show_small_number() returned early for the same reason. Cap the shown value at 99. - 0.9 was shown as ".9": the leading zero was only added below 9. Co-Authored-By: Claude Opus 5.5 --- src/device.c | 7 ++++++- src/lcd.c | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/device.c b/src/device.c index 42f9ccd..a4ce23c 100644 --- a/src/device.c +++ b/src/device.c @@ -234,13 +234,18 @@ void read_sensor_and_save() { } } #endif + // the big number only fits -9.9..199.9 with a point; show whole degrees below that + if (displayTemperature < -99) { + hasPoint = 0; + displayTemperature = displayTemperature / 10; + } // update lcd show_temp_symbol(tempSymbol); show_big_number(displayTemperature, hasPoint); #ifdef ZCL_RELATIVE_HUMIDITY_MEASUREMENT #ifdef ZCL_TEMPERATURE_MEASUREMENT - show_small_number(g_zcl_relHumidityAttrs.measuredValue / 100, 1); + show_small_number(g_zcl_relHumidityAttrs.measuredValue >= 9900 ? 99 : g_zcl_relHumidityAttrs.measuredValue / 100, 1); show_battery_symbol(g_zcl_powerAttrs.batteryPercentage <= 20); // in 0.5% if (!g_zcl_thermostatUICfgAttrs.smileyOn) { show_smiley(0); diff --git a/src/lcd.c b/src/lcd.c index 34f463c..cf661b6 100644 --- a/src/lcd.c +++ b/src/lcd.c @@ -231,7 +231,7 @@ void show_big_number(int16_t number, bool point){ display_buff[4] = point?0x08:0x00; if(number > 99)display_buff[5] |= display_numbers[number / 100 % 10] & 0xF7; if(number > 9)display_buff[4] |= display_numbers[number / 10 % 10] & 0xF7; - if(number < 9)display_buff[4] |= display_numbers[0] & 0xF7; + if(number < 10)display_buff[4] |= display_numbers[0] & 0xF7; display_buff[3] = display_numbers[number %10] & 0xF7; }