@@ -8,29 +8,51 @@ void sensorTask(void *parameter)
8
8
DallasTemperature sensor (&oneWire);
9
9
10
10
sensor.begin ();
11
-
11
+
12
12
DeviceAddress sensorAddress;
13
13
14
14
if (!sensor.getAddress (sensorAddress, 0 ))
15
15
{
16
16
log_d (" No DS18B20 sensor found. Deleting task." );
17
17
vTaskDelete (NULL );
18
18
}
19
-
20
19
sensor.setResolution (sensorAddress, 12 );
21
- sensor.requestTemperatures ();
20
+
21
+ float lastTemperatureC = DEVICE_DISCONNECTED_C;
22
+ static int errorCount = 0 ;
22
23
23
24
while (1 )
24
25
{
26
+ sensor.requestTemperatures ();
27
+
25
28
vTaskDelay (pdMS_TO_TICKS (750 ));
26
29
27
30
const float temperatureC = sensor.getTempC (sensorAddress);
28
31
29
- if (temperatureC != DEVICE_DISCONNECTED_C)
30
- log_i (" Temperature: %.2f°C" , temperatureC);
31
- else
32
+ if (temperatureC == DEVICE_DISCONNECTED_C)
33
+ {
32
34
log_i (" Sensor disconnected or error reading temperature." );
35
+ if (++errorCount >= 10 )
36
+ {
37
+ log_e (" Persistent sensor error after 10 retries. Deleting task." );
38
+ vTaskDelete (NULL );
39
+ }
40
+ }
41
+ else
42
+ {
43
+ errorCount = 0 ;
33
44
34
- sensor.requestTemperatures ();
45
+ if (fabs (temperatureC - lastTemperatureC) > TEMPERATURE_THRESHOLD)
46
+ {
47
+ lcdMessage_t msg;
48
+ msg.type = TEMPERATURE;
49
+ msg.float1 = temperatureC;
50
+
51
+ const BaseType_t result = xQueueSend (lcdQueue, &msg, 0 );
52
+
53
+ log_i (" %s lcd temperature %.2f°C" , result ? " Updated" : " Could not update" , temperatureC);
54
+ lastTemperatureC = result ? temperatureC : lastTemperatureC;
55
+ }
56
+ }
35
57
}
36
58
}
0 commit comments