forked from EmbeddedTeam/app_photomagnetic
Add printk debug statements to NTC temperature sensor reading and IR temperature sensor reading. Change NTC loop to use index-based iteration. Fix missing newline in boot message. Remove unused watchdog and commented-out code.
67 lines
1.6 KiB
C++
67 lines
1.6 KiB
C++
#ifndef THER_NTC_HPP
|
|
#define THER_NTC_HPP
|
|
#include <cmath>
|
|
#include <zephyr/device.h>
|
|
#include <zephyr/drivers/sensor.h>
|
|
#include <zephyr/sys/printk.h>
|
|
#include <zpp/result.hpp>
|
|
|
|
namespace ther {
|
|
|
|
class NtcGroup {
|
|
public:
|
|
/// Read all NTC sensors, return the maximum temperature value.
|
|
/// Returns error if every sensor read fails.
|
|
static auto GetSensorValue() -> zpp::result<sensor_value> {
|
|
bool found = false;
|
|
sensor_value max_val{};
|
|
|
|
for (size_t i = 0; i < NTC_COUNT; ++i) {
|
|
const auto *dev = s_devices[i];
|
|
|
|
if (0 != sensor_sample_fetch(dev)) {
|
|
printk("[ntc] #%zu ERR fetch\n", i + 1);
|
|
continue;
|
|
}
|
|
|
|
sensor_value val{};
|
|
if (0 != sensor_channel_get(dev, SENSOR_CHAN_AMBIENT_TEMP, &val)) {
|
|
printk("[ntc] #%zu ERR channel_get\n", i + 1);
|
|
continue;
|
|
}
|
|
|
|
printk("[ntc]#%zu = %d.%d°C\n", i + 1, val.val1, val.val2);
|
|
|
|
if (!found || val.val1 > max_val.val1 ||
|
|
(val.val1 == max_val.val1 && val.val2 > max_val.val2)) {
|
|
max_val = val;
|
|
found = true;
|
|
}
|
|
}
|
|
|
|
if (found) {
|
|
return max_val;
|
|
}
|
|
|
|
return zpp::error_code::k_io;
|
|
}
|
|
|
|
private:
|
|
static constexpr size_t NTC_COUNT = 8;
|
|
|
|
inline static const device *s_devices[] = {
|
|
DEVICE_DT_GET(DT_NODELABEL(pole_ntc1)),
|
|
DEVICE_DT_GET(DT_NODELABEL(pole_ntc2)),
|
|
DEVICE_DT_GET(DT_NODELABEL(pole_ntc3)),
|
|
DEVICE_DT_GET(DT_NODELABEL(pole_ntc4)),
|
|
DEVICE_DT_GET(DT_NODELABEL(pole_ntc5)),
|
|
DEVICE_DT_GET(DT_NODELABEL(pole_ntc6)),
|
|
DEVICE_DT_GET(DT_NODELABEL(pole_ntc7)),
|
|
DEVICE_DT_GET(DT_NODELABEL(pole_ntc8)),
|
|
};
|
|
};
|
|
|
|
} // namespace ther
|
|
|
|
#endif // THER_NTC_HPP
|