Skip to content

Commit 90046b0

Browse files
committed
SNS: Temp Rewrite
1 parent 516a539 commit 90046b0

File tree

6 files changed

+148
-47
lines changed

6 files changed

+148
-47
lines changed

src/data/data.hpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -75,16 +75,16 @@ struct BrakePressureData : public SensorData {
7575
};
7676

7777
struct Sensors : public Module {
78-
static constexpr size_t kNumImus = 4;
79-
static constexpr size_t kNumEncoders = 4;
80-
static constexpr size_t kNumBrakePressure = 2;
81-
static constexpr size_t kNumBrakeTemp = 2;
82-
static constexpr size_t kNumAmbientTemp = 4;
78+
static constexpr size_t kNumImus = 4;
79+
static constexpr size_t kNumEncoders = 4;
80+
static constexpr size_t kNumBrakePressure = 2;
81+
static constexpr size_t kNumBrakeSuspensionTemp = 4;
82+
static constexpr size_t kNumAmbientTemp = 1;
8383

8484
TemperatureData temperature;
8585
AmbientPressureData ambient_pressure;
8686

87-
std::array<TemperatureData, kNumBrakeTemp> brake_temperature_array;
87+
std::array<TemperatureData, kNumBrakeSuspensionTemp> brake_suspension_temperature_array;
8888
std::array<TemperatureData, kNumAmbientTemp> ambient_temperature_array;
8989

9090
DataPoint<std::array<ImuData, kNumImus>> imu;

src/debugging/observer.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ void Observer::addFakeImuManagerTask(std::shared_ptr<sensors::FakeTrajectory> fa
256256

257257
void Observer::addTemperatureTask(const uint8_t pin)
258258
{
259-
auto temperature = std::make_shared<sensors::Temperature>(pin);
259+
auto temperature = std::make_shared<sensors::AmbientTemperature>(pin);
260260
std::stringstream name;
261261
name << "temperature-" << static_cast<uint32_t>(pin);
262262
Task temperature_task;

src/sensors/main.cpp

+50-21
Original file line numberDiff line numberDiff line change
@@ -77,14 +77,36 @@ Main::Main()
7777
return;
7878
}
7979
if (ambient_temperature_pins->size() != data::Sensors::kNumAmbientTemp) {
80-
log_.error("found %u temperature pins but %u were expected",
80+
log_.error("found %u ambient temperature pins but %u were expected",
8181
static_cast<uint32_t>(ambient_temperature_pins->size()),
8282
static_cast<uint32_t>(data::Sensors::kNumAmbientTemp));
8383
sys_.stop();
8484
return;
8585
}
8686
for (size_t i = 0; i < data::Sensors::kNumAmbientTemp; ++i) {
87-
ambient_temperatures_.at(i) = std::make_unique<Temperature>(ambient_temperature_pins->at(i));
87+
ambient_temperatures_.at(i)
88+
= std::make_unique<AmbientTemperature>(ambient_temperature_pins->at(i));
89+
}
90+
91+
const auto brakes_and_suspension_temperature_pins
92+
= brakeSuspensionTemperaturePinsFromFile(log_, sys_.config_.temperature_config_path);
93+
if (!brakes_and_suspension_temperature_pins) {
94+
log_.error("failed to initialise brakes and suspension temperature sensor");
95+
sys_.stop();
96+
return;
97+
}
98+
99+
if (brakes_and_suspension_temperature_pins->size() != data::Sensors::kNumBrakeSuspensionTemp) {
100+
log_.error("found %u brake/suspension temperature pins but %u were expected",
101+
static_cast<uint32_t>(brakes_and_suspension_temperature_pins->size()),
102+
static_cast<uint32_t>(data::Sensors::kNumBrakeSuspensionTemp));
103+
sys_.stop();
104+
return;
105+
}
106+
107+
for (size_t i = 0; i < data::Sensors::kNumBrakeSuspensionTemp; ++i) {
108+
brakes_and_suspension_temperatures_.at(i) = std::make_unique<BrakesAndSuspensionTemperature>(
109+
brakes_and_suspension_temperature_pins->at(i));
88110
}
89111
}
90112

@@ -142,23 +164,25 @@ void Main::checkAmbientTemperature()
142164
ambient_temperature_data.at(i).temperature = ambient_temperatures_[i]->getData();
143165
if ((ambient_temperature_data.at(i).temperature > 75
144166
|| ambient_temperature_data.at(i).temperature < 1)) {
145-
log_.info("PCB temperature is getting a wee high...sorry Cheng");
167+
log_.info("Ambient Temperature is higher than 75 degrees");
146168
auto sensors_data = data_.getSensorsData();
147169
sensors_data.module_status = data::ModuleStatus::kCriticalFailure;
148170
data_.setSensorsData(sensors_data);
149171
}
150172
}
151173
}
152174

153-
void Main::checkBrakeTemperature()
175+
void Main::checkBrakeAndSuspensionTemperature()
154176
{
155-
auto brakes_temperature_data = data_.getSensorsData().brake_temperature_array;
156-
for (size_t i = 0; i < data::Sensors::kNumBrakeTemp; ++i) {
157-
brake_temperatures_[i]->run(); // not a thread
158-
brakes_temperature_data.at(i).temperature = brake_temperatures_[i]->getData();
159-
if ((brakes_temperature_data.at(i).temperature > 75
160-
|| brakes_temperature_data.at(i).temperature < 0)) {
161-
log_.info("PCB temperature is getting a wee high...sorry Cheng");
177+
auto brakes_and_suspension_temperature_data
178+
= data_.getSensorsData().brake_suspension_temperature_array;
179+
for (size_t i = 0; i < data::Sensors::kNumBrakeSuspensionTemp; ++i) {
180+
brakes_and_suspension_temperatures_[i]->run(); // not a thread
181+
brakes_and_suspension_temperature_data.at(i).temperature
182+
= brakes_and_suspension_temperatures_[i]->getData();
183+
if ((brakes_and_suspension_temperature_data.at(i).temperature > 85
184+
|| brakes_and_suspension_temperature_data.at(i).temperature < 0)) {
185+
log_.info("A Brake or Suspension pcb is hotter than 85 degrees");
162186
auto sensors_data = data_.getSensorsData();
163187
sensors_data.module_status = data::ModuleStatus::kCriticalFailure;
164188
data_.setSensorsData(sensors_data);
@@ -272,8 +296,8 @@ std::optional<std::vector<uint8_t>> Main::ambientTemperaturePinsFromFile(utils::
272296
return ambient_temperature_pins;
273297
}
274298

275-
std::optional<std::vector<uint8_t>> Main::brakeTemperaturePinsFromFile(utils::Logger &log,
276-
const std::string &path)
299+
std::optional<std::vector<uint8_t>> Main::brakeSuspensionTemperaturePinsFromFile(
300+
utils::Logger &log, const std::string &path)
277301
{
278302
std::ifstream input_stream(path);
279303
if (!input_stream.is_open()) {
@@ -292,21 +316,25 @@ std::optional<std::vector<uint8_t>> Main::brakeTemperaturePinsFromFile(utils::Lo
292316
return std::nullopt;
293317
}
294318
auto config_object = document["sensors"].GetObject();
295-
if (!config_object.HasMember("temperature_pins")) {
296-
log.error("Missing required field 'sensors.temperature_pins' in configuration file at %s",
297-
path.c_str());
319+
if (!config_object.HasMember("brakes_suspension_temperature_pins")) {
320+
log.error(
321+
"Missing required field 'sensors.brakes_suspension_temperature_pins' in configuration file "
322+
"at %s",
323+
path.c_str());
298324
return std::nullopt;
299325
}
300-
const auto brake_temperature_pin_array = config_object["temperature_pins"].GetArray();
301-
if (brake_temperature_pin_array.Size() != data::Sensors::kNumAmbientTemp) {
302-
log.error("Found %d brake temperature pins but %d were expected in configuration file at %s",
303-
brake_temperature_pin_array.Size(), data::Sensors::kNumBrakeTemp, path.c_str());
326+
const auto brake_temperature_pin_array
327+
= config_object["brakes_suspension_temperature_pins"].GetArray();
328+
if (brake_temperature_pin_array.Size() != data::Sensors::kNumBrakeSuspensionTemp) {
329+
log.error(
330+
"Found %d brake/suspension temperature pins but %d were expected in configuration file at %s",
331+
brake_temperature_pin_array.Size(), data::Sensors::kNumBrakeSuspensionTemp, path.c_str());
304332
}
305333
std::vector<uint8_t> brake_temperature_pins;
306334
for (const auto &brake_temperature_pin : brake_temperature_pin_array) {
307335
const auto pin = brake_temperature_pin.GetUint();
308336
if (pin > UINT8_MAX) {
309-
log.error("brake temperature pin value %u is too large", pin);
337+
log.error("brake/suspension temperature pin value %u is too large", pin);
310338
return std::nullopt;
311339
}
312340
brake_temperature_pins.push_back(static_cast<uint8_t>(pin));
@@ -409,6 +437,7 @@ void Main::run()
409437

410438
while (sys_.isRunning()) {
411439
checkAmbientTemperature();
440+
checkBrakeAndSuspensionTemperature();
412441
checkAmbientPressure();
413442
checkBrakePressure();
414443
Thread::sleep(200);

src/sensors/main.hpp

+5-7
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ class Main : public utils::concurrent::Thread {
2828
const std::string &path);
2929
static std::optional<std::vector<uint8_t>> ambientTemperaturePinsFromFile(
3030
utils::Logger &log, const std::string &path);
31-
static std::optional<std::vector<uint8_t>> brakeTemperaturePinsFromFile(utils::Logger &log,
32-
const std::string &path);
31+
static std::optional<std::vector<uint8_t>> brakeSuspensionTemperaturePinsFromFile(
32+
utils::Logger &log, const std::string &path);
3333
static std::optional<AmbientPressurePins> ambientPressurePinsFromFile(utils::Logger &log,
3434
const std::string &path);
3535

@@ -52,10 +52,10 @@ class Main : public utils::concurrent::Thread {
5252
void checkAmbientTemperature();
5353

5454
/**
55-
* @brief used to check the temperature of the brake temperature sensors
55+
* @brief used to check the temperature of the brake and suspension temperature sensors
5656
* infrequently in main loop, unnecessary to constantly check temperature;
5757
*/
58-
void checkBrakeTemperature();
58+
void checkBrakeAndSuspensionTemperature();
5959

6060
/**
6161
* @brief used to check the pressure every twenty times in the main loop,
@@ -81,9 +81,7 @@ class Main : public utils::concurrent::Thread {
8181
std::unique_ptr<BmsManager> battery_manager_;
8282

8383
std::array<std::unique_ptr<ITemperature>, data::Sensors::kNumAmbientTemp> ambient_temperatures_;
84-
std::array<std::unique_ptr<ITemperature>, data::Sensors::kNumBrakeTemp> brake_temperatures_;
85-
86-
data::TemperatureData temperature_data_;
84+
std::array<std::unique_ptr<ITemperature>, data::Sensors::kNumBrakeSuspensionTemp> brakes_and_suspension_temperatures_;
8785

8886
std::unique_ptr<IAmbientPressure> ambient_pressure_;
8987
data::AmbientPressureData pressure_data_;

src/sensors/temperature.cpp

+41-7
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,19 @@
66

77
namespace hyped::sensors {
88

9-
Temperature::Temperature(const uint8_t pin)
10-
: log_("TEMPERATURE", utils::System::getSystem().config_.log_level_sensors),
9+
AmbientTemperature::AmbientTemperature(const uint8_t pin)
10+
: log_("AMBIENT TEMPERATURE", utils::System::getSystem().config_.log_level_sensors),
1111
pin_(pin)
1212
{
1313
log_.info("started temperature for pin %u", pin);
1414
}
1515

16-
Temperature::~Temperature()
16+
AmbientTemperature::~AmbientTemperature()
1717
{
18-
log_.info("stopped temperature for pin");
18+
log_.info("stopped ambient temperature for pin");
1919
}
2020

21-
void Temperature::run()
21+
void AmbientTemperature::run()
2222
{
2323
uint16_t raw_value = pin_.read();
2424
log_.debug("raw value: %d", raw_value);
@@ -27,15 +27,49 @@ void Temperature::run()
2727
temperature_data_.operational = true;
2828
}
2929

30-
int8_t Temperature::scaleData(const uint8_t raw_value)
30+
int8_t AmbientTemperature::scaleData(const uint8_t raw_value)
3131
{
3232
// convert to degrees C
3333
double temp = static_cast<double>(raw_value) / 4095;
3434
temp = (temp * 175) - 50;
3535
return static_cast<int8_t>(temp);
3636
}
3737

38-
uint8_t Temperature::getData() const
38+
uint8_t AmbientTemperature::getData() const
39+
{
40+
return temperature_data_.temperature;
41+
}
42+
43+
BrakesAndSuspensionTemperature::BrakesAndSuspensionTemperature(const uint8_t pin)
44+
: log_("BRAKE-SUSP TEMPERATURE", utils::System::getSystem().config_.log_level_sensors),
45+
pin_(pin)
46+
{
47+
log_.info("started temperature for pin %u", pin);
48+
}
49+
50+
BrakesAndSuspensionTemperature::~BrakesAndSuspensionTemperature()
51+
{
52+
log_.info("stopped brake/suspension temperature for pin");
53+
}
54+
55+
void BrakesAndSuspensionTemperature::run()
56+
{
57+
uint16_t raw_value = pin_.read();
58+
log_.debug("raw value: %d", raw_value);
59+
temperature_data_.temperature = scaleData(raw_value);
60+
log_.debug("scaled value: %d", temperature_data_.temperature);
61+
temperature_data_.operational = true;
62+
}
63+
64+
int8_t BrakesAndSuspensionTemperature::scaleData(const uint8_t raw_value)
65+
{
66+
// convert to degrees C
67+
double temp = static_cast<double>(raw_value) / 4095;
68+
temp = (temp * 175) - 50;
69+
return static_cast<int8_t>(temp);
70+
}
71+
72+
uint8_t BrakesAndSuspensionTemperature::getData() const
3973
{
4074
return temperature_data_.temperature;
4175
}

src/sensors/temperature.hpp

+45-5
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
namespace hyped::sensors {
99

1010
using AmbientTemperaturePins = std::array<uint8_t, data::Sensors::kNumAmbientTemp>;
11-
using BrakeTemperaturePins = std::array<uint8_t, data::Sensors::kNumBrakeTemp>;
11+
using BrakeTemperaturePins = std::array<uint8_t, data::Sensors::kNumBrakeSuspensionTemp>;
1212

1313
class ITemperature {
1414
public:
@@ -29,15 +29,55 @@ class ITemperature {
2929
virtual uint8_t getData() const = 0;
3030
};
3131

32-
class Temperature : public ITemperature {
32+
class AmbientTemperature : public ITemperature {
3333
public:
3434
/**
35-
* @brief Construct a new Temperature object
35+
* @brief Construct a new Ambient Temperature object
3636
*
3737
* @param pin for specific ADC pin
3838
*/
39-
Temperature(const uint8_t pin);
40-
~Temperature();
39+
AmbientTemperature(const uint8_t pin);
40+
~AmbientTemperature();
41+
42+
/**
43+
* @brief
44+
*
45+
* @return int to set to data struct in sensors main
46+
*/
47+
uint8_t getData() const override;
48+
49+
/**
50+
* @brief one interation of checking sensors
51+
*/
52+
void run() override;
53+
54+
private:
55+
/**
56+
* @brief scale raw digital data to output in degrees C
57+
*
58+
* @param raw_value input voltage
59+
* @return int representation of temperature
60+
*/
61+
static int8_t scaleData(uint8_t raw_value);
62+
63+
utils::Logger log_;
64+
utils::io::Adc pin_;
65+
66+
/**
67+
* @brief int from data structs
68+
*/
69+
data::TemperatureData temperature_data_;
70+
};
71+
72+
class BrakesAndSuspensionTemperature : public ITemperature {
73+
public:
74+
/**
75+
* @brief Construct a new Brakes and Suspension Temperature object
76+
*
77+
* @param pin for specific ADC pin
78+
*/
79+
BrakesAndSuspensionTemperature(const uint8_t pin);
80+
~BrakesAndSuspensionTemperature();
4181

4282
/**
4383
* @brief

0 commit comments

Comments
 (0)