diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2023-12-17 15:11:10 +0100 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2023-12-17 15:13:47 +0100 |
commit | 6f00ffb0f016413522bd54dc9e44beb92864df02 (patch) | |
tree | 7fc919bbfd84cd6da35d1e36ae22fa85d3b9729b | |
parent | 7f46a3879c9c76aa817cc27fb39718b8dd813f96 (diff) | |
download | glutte-o-matic-6f00ffb0f016413522bd54dc9e44beb92864df02.tar.gz glutte-o-matic-6f00ffb0f016413522bd54dc9e44beb92864df02.tar.bz2 glutte-o-matic-6f00ffb0f016413522bd54dc9e44beb92864df02.zip |
Keep temperature valid for 15 minutes
-rw-r--r-- | src/common/Core/fsm.c | 10 | ||||
-rw-r--r-- | src/common/Core/main.c | 4 | ||||
-rw-r--r-- | src/common/GPIO/temperature.c | 25 | ||||
-rw-r--r-- | src/common/GPIO/temperature.h | 9 | ||||
-rw-r--r-- | src/glutt-o-logique/temperature.c | 7 | ||||
-rw-r--r-- | src/simulator/src/GPIO/temperature.c | 5 | ||||
-rw-r--r-- | src/temperature/main.c | 4 | ||||
-rw-r--r-- | src/temperature/temperature.c | 5 | ||||
-rw-r--r-- | src/temperature/temperature.h | 4 |
9 files changed, 39 insertions, 34 deletions
diff --git a/src/common/Core/fsm.c b/src/common/Core/fsm.c index 52ec8cb..47c349d 100644 --- a/src/common/Core/fsm.c +++ b/src/common/Core/fsm.c @@ -520,10 +520,11 @@ void fsm_update() { " %d AH %c ", capacity_bat_ah, supply_trend); } - if (temperature_valid()) { + float temp = 0; + if (temperature_get(&temp)) { len += snprintf(balise_message + len, BALISE_MESSAGE_LEN-len-1, " T %d ", - (int)(round_float_to_half_steps(temperature_get()))); + (int)(round_float_to_half_steps(temp))); } snprintf(balise_message + len, BALISE_MESSAGE_LEN-len-1, @@ -639,10 +640,11 @@ void fsm_update() { " %d AH ", capacity_bat_ah); } - if (temperature_valid()) { + float temp = 0; + if (temperature_get(&temp)) { len += snprintf(balise_message + len, BALISE_MESSAGE_LEN-len-1, " T %d ", - (int)(round_float_to_half_steps(temperature_get()))); + (int)(round_float_to_half_steps(temp))); } len += snprintf(balise_message+len, BALISE_MESSAGE_LEN-len-1, diff --git a/src/common/Core/main.c b/src/common/Core/main.c index ea393ab..f525221 100644 --- a/src/common/Core/main.c +++ b/src/common/Core/main.c @@ -502,8 +502,8 @@ static void gps_monit_task(void __attribute__ ((unused))*pvParameters) { stats_battery_at_full_hour(time.tm_hour, u_bat, capacity_bat); } - if (temperature_valid()) { - float temp = temperature_get(); + float temp = 0; + if (temperature_get(&temp)) { stats_temp(temp); const char *sign = ""; diff --git a/src/common/GPIO/temperature.c b/src/common/GPIO/temperature.c index f9e43cb..54fba80 100644 --- a/src/common/GPIO/temperature.c +++ b/src/common/GPIO/temperature.c @@ -30,7 +30,9 @@ float _temperature_last_value; -int _temperature_valid; +int _temperature_valid_since; + +#define TEMP_VALID_DURATION (60*15) // 15 minutes void temperature_task(void *pvParameters); @@ -47,16 +49,17 @@ void temperature_init() { NULL); } -// Return the current temperature -float temperature_get() { - if (_temperature_valid) { - return _temperature_last_value; - } else { - return 0.0f; - } +int temperature_valid() { + const uint64_t now = timestamp_now(); + return _temperature_valid_since > 0 && _temperature_valid_since + TEMP_VALID_DURATION < now; } -// Return 1 if the temperature is valid -int temperature_valid() { - return _temperature_valid; +// Return 1 if the the current temperature is valid, and write it into temp +int temperature_get(float *temp) { + if (temperature_valid()) { + *temp = _temperature_last_value; + return 1; + } + return 0; } + diff --git a/src/common/GPIO/temperature.h b/src/common/GPIO/temperature.h index f49cc26..8d8216f 100644 --- a/src/common/GPIO/temperature.h +++ b/src/common/GPIO/temperature.h @@ -26,15 +26,16 @@ #include <stdint.h> extern float _temperature_last_value; -extern int _temperature_valid; +extern int _temperature_valid_since; // Setup communication and temperature void temperature_init(void); -// Return 1 if the temperature is valid +// Return 1 if the the current temperature is valid int temperature_valid(void); -// Get current temperature -float temperature_get(void); +// Return 1 if the the current temperature is valid, and write it into temp +int temperature_get(float *temp); + void temperature_task(void *); diff --git a/src/glutt-o-logique/temperature.c b/src/glutt-o-logique/temperature.c index 2ca5f5c..12eaec0 100644 --- a/src/glutt-o-logique/temperature.c +++ b/src/glutt-o-logique/temperature.c @@ -105,15 +105,12 @@ int ds18b20_gettemp(float *temperature) { void temperature_task(void __attribute__ ((unused))*pvParameters) { while (1) { - - if (!_temperature_valid) { + if (!temperature_valid()) { ds18b20_init(); } if (ds18b20_gettemp(&_temperature_last_value)) { - _temperature_valid = 1; - } else { - _temperature_valid = 0; + _temperature_valid_since = timestamp_now(); } vTaskDelay(_temperature_delay); diff --git a/src/simulator/src/GPIO/temperature.c b/src/simulator/src/GPIO/temperature.c index ce38097..868d99c 100644 --- a/src/simulator/src/GPIO/temperature.c +++ b/src/simulator/src/GPIO/temperature.c @@ -22,7 +22,7 @@ * SOFTWARE. */ - +#include "Core/common.h" #include "GPIO/temperature.h" #include "FreeRTOS.h" #include "task.h" @@ -33,9 +33,8 @@ extern float gui_temperature; void temperature_task(void __attribute__ ((unused))*pvParameters) { while (1) { - _temperature_last_value = gui_temperature; - _temperature_valid = gui_temperature_valid; + _temperature_valid_since = gui_temperature_valid ? timestamp_now() : 0; vTaskDelay(pdMS_TO_TICKS(1000)); diff --git a/src/temperature/main.c b/src/temperature/main.c index 2ee9bc6..06b753f 100644 --- a/src/temperature/main.c +++ b/src/temperature/main.c @@ -97,7 +97,9 @@ static void detect_button_press(void *pvParameters) char t[32]; // For debugging purposes only. snprinf has issues with %f - snprintf(t, 32, "%d.%02d", (int)temperature_get(), (int)(temperature_get() * 100.0 - (int)(temperature_get()) * 100.0)); + float temp = 0; + int temp_valid = temperature_get(&temp); + snprintf(t, 32, "%d.%02d", (int)temp, (int)(temp * 100.0 - (int)temp * 100.0)); debug_print(t); int32_t pressure = 0; diff --git a/src/temperature/temperature.c b/src/temperature/temperature.c index b9e95e2..575fa79 100644 --- a/src/temperature/temperature.c +++ b/src/temperature/temperature.c @@ -12,6 +12,7 @@ void temperature_update() { temperature_value = ((ADC_GetConversionValue(ADC1) * TEMP_V_BOARD / 0xFFF) - TEMP_V25) / TEMP_AVG_SLOPE + 25.0; } -float temperature_get() { - return temperature_value; +int temperature_get(float *temp) { + *temp = temperature_value; + return 1; } diff --git a/src/temperature/temperature.h b/src/temperature/temperature.h index ebe8f8b..0c1ba2e 100644 --- a/src/temperature/temperature.h +++ b/src/temperature/temperature.h @@ -5,5 +5,5 @@ // Conpute the current temperature void temperature_update(); -// Return the current temperature -float temperature_get(); +// Return 1 if the the current temperature is valid, and write it into temp +int temperature_get(float *temp); |