aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2023-12-17 15:11:10 +0100
committerMatthias P. Braendli <matthias.braendli@mpb.li>2023-12-17 15:13:47 +0100
commit6f00ffb0f016413522bd54dc9e44beb92864df02 (patch)
tree7fc919bbfd84cd6da35d1e36ae22fa85d3b9729b
parent7f46a3879c9c76aa817cc27fb39718b8dd813f96 (diff)
downloadglutte-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.c10
-rw-r--r--src/common/Core/main.c4
-rw-r--r--src/common/GPIO/temperature.c25
-rw-r--r--src/common/GPIO/temperature.h9
-rw-r--r--src/glutt-o-logique/temperature.c7
-rw-r--r--src/simulator/src/GPIO/temperature.c5
-rw-r--r--src/temperature/main.c4
-rw-r--r--src/temperature/temperature.c5
-rw-r--r--src/temperature/temperature.h4
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);