Skip to content

Commit fd1697e

Browse files
Refactored
1 parent b386283 commit fd1697e

File tree

2 files changed

+35
-7
lines changed

2 files changed

+35
-7
lines changed

src/sensorTask.cpp

+29-7
Original file line numberDiff line numberDiff line change
@@ -8,29 +8,51 @@ void sensorTask(void *parameter)
88
DallasTemperature sensor(&oneWire);
99

1010
sensor.begin();
11-
11+
1212
DeviceAddress sensorAddress;
1313

1414
if (!sensor.getAddress(sensorAddress, 0))
1515
{
1616
log_d("No DS18B20 sensor found. Deleting task.");
1717
vTaskDelete(NULL);
1818
}
19-
2019
sensor.setResolution(sensorAddress, 12);
21-
sensor.requestTemperatures();
20+
21+
float lastTemperatureC = DEVICE_DISCONNECTED_C;
22+
static int errorCount = 0;
2223

2324
while (1)
2425
{
26+
sensor.requestTemperatures();
27+
2528
vTaskDelay(pdMS_TO_TICKS(750));
2629

2730
const float temperatureC = sensor.getTempC(sensorAddress);
2831

29-
if (temperatureC != DEVICE_DISCONNECTED_C)
30-
log_i("Temperature: %.2f°C", temperatureC);
31-
else
32+
if (temperatureC == DEVICE_DISCONNECTED_C)
33+
{
3234
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;
3344

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+
}
3557
}
3658
}

src/sensorTask.hpp

+6
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44
#include <OneWire.h>
55
#include <DallasTemperature.h>
66

7+
#include "lcdMessage_t.h"
8+
9+
#define TEMPERATURE_THRESHOLD (0.1f)
10+
11+
extern QueueHandle_t lcdQueue;
12+
713
static constexpr int ONE_WIRE_PIN = 26;
814

915
#endif

0 commit comments

Comments
 (0)