diff --git a/src/boards/RIGv2/Configs/SensorsConfig.h b/src/boards/RIGv2/Configs/SensorsConfig.h index 7f12a6710ae4fefbf0565566eeb55fd583d6b48e..28712cd8f496f7b662f29ab88cdc5019eb6c7ddc 100644 --- a/src/boards/RIGv2/Configs/SensorsConfig.h +++ b/src/boards/RIGv2/Configs/SensorsConfig.h @@ -34,6 +34,7 @@ namespace Sensors { static constexpr uint32_t ADC_SAMPLE_PERIOD = 10; +static constexpr uint32_t TC_SAMPLE_PERIOD = 100; } diff --git a/src/boards/RIGv2/Radio/Radio.cpp b/src/boards/RIGv2/Radio/Radio.cpp index b4d51c19393586953d64ee0ebaa2a1d5f0553c8e..8e5f5d3f1f564d27cf0d397e1dfb7c2a97af396c 100644 --- a/src/boards/RIGv2/Radio/Radio.cpp +++ b/src/boards/RIGv2/Radio/Radio.cpp @@ -402,7 +402,10 @@ bool Radio::packSystemTm(uint8_t tmId, mavlink_message_t& msg) { mavlink_motor_tm_t tm; + auto tc1 = modules.get<Sensors>()->getTc1LastSample(); + tm.timestamp = TimestampTimer::getTimestamp(); + tm.tank_temperature = tc1.temperature; tm.top_tank_pressure = 69; tm.bottom_tank_pressure = 420; diff --git a/src/boards/RIGv2/Sensors/Sensors.cpp b/src/boards/RIGv2/Sensors/Sensors.cpp index 4318603df29f517a61fe4b9f3c77a9cab53d42c2..fabc78951bd7c197395edbd6519e0d59a6e98919 100644 --- a/src/boards/RIGv2/Sensors/Sensors.cpp +++ b/src/boards/RIGv2/Sensors/Sensors.cpp @@ -37,6 +37,7 @@ bool Sensors::start() { SensorManager::SensorMap_t map; adc1Init(map); + tc1Init(map); manager = std::make_unique<SensorManager>(map, &scheduler); if (!manager->start()) @@ -61,6 +62,12 @@ ADS131M08Data Sensors::getADC1LastSample() return adc1->getLastSample(); } +Boardcore::MAX31856Data Sensors::getTc1LastSample() +{ + PauseKernelLock l; + return tc1->getLastSample(); +} + void Sensors::adc1Init(SensorManager::SensorMap_t &map) { ModuleManager &modules = ModuleManager::getInstance(); @@ -92,8 +99,32 @@ void Sensors::adc1Callback() sample.voltage[4], sample.voltage[5], sample.voltage[6], sample.voltage[7]}; - // For Flavio, fuck Flavio - LOG_INFO(logger, "{}\t{}", sample.voltage[6], sample.voltage[7]); + sdLogger.log(data); +} + +void Sensors::tc1Init(SensorManager::SensorMap_t &map) +{ + ModuleManager &modules = ModuleManager::getInstance(); + + SPIBusConfig spiConfig = MAX31856::getDefaultSPIConfig(); + spiConfig.clockDivider = SPI::ClockDivider::DIV_32; + + tc1 = + std::make_unique<MAX31856>(modules.get<Buses>()->getMAX31856_1(), + sensors::MAX31856_1::cs::getPin(), spiConfig, + MAX31856::ThermocoupleType::K_TYPE); + + SensorInfo info("MAX31856_1", Config::Sensors::TC_SAMPLE_PERIOD, + [this]() { tc1Callback(); }); + map.emplace(std::make_pair(tc1.get(), info)); +} + +void Sensors::tc1Callback() +{ + MAX31856Data sample = tc1->getLastSample(); + + TCsData data{sample.temperatureTimestamp, 1, sample.temperature, + sample.coldJunctionTemperature}; sdLogger.log(data); } \ No newline at end of file diff --git a/src/boards/RIGv2/Sensors/Sensors.h b/src/boards/RIGv2/Sensors/Sensors.h index 14eeef1914e75006e986c78b44beeb80aef22db4..43d614ee797e95137d5e782beafc59197fa5ce79 100644 --- a/src/boards/RIGv2/Sensors/Sensors.h +++ b/src/boards/RIGv2/Sensors/Sensors.h @@ -23,6 +23,7 @@ #pragma once #include <sensors/ADS131M08/ADS131M08.h> +#include <sensors/MAX31856/MAX31856.h> #include <sensors/SensorManager.h> #include <memory> @@ -44,10 +45,14 @@ public: bool isStarted(); Boardcore::ADS131M08Data getADC1LastSample(); + Boardcore::MAX31856Data getTc1LastSample(); private: void adc1Init(Boardcore::SensorManager::SensorMap_t &map); void adc1Callback(); + + void tc1Init(Boardcore::SensorManager::SensorMap_t &map); + void tc1Callback(); Boardcore::Logger &sdLogger = Boardcore::Logger::getInstance(); Boardcore::PrintLogger logger = Boardcore::Logging::getLogger("sensors"); @@ -55,6 +60,7 @@ private: std::atomic<bool> started{false}; std::unique_ptr<Boardcore::ADS131M08> adc1; + std::unique_ptr<Boardcore::MAX31856> tc1; std::unique_ptr<Boardcore::SensorManager> manager; }; diff --git a/src/boards/RIGv2/Sensors/SensorsData.h b/src/boards/RIGv2/Sensors/SensorsData.h index db59f9eef247763d23289271997f4bf8473fa3fc..ac2a64432705f98d1d16ad30c6f101eb7546c256 100644 --- a/src/boards/RIGv2/Sensors/SensorsData.h +++ b/src/boards/RIGv2/Sensors/SensorsData.h @@ -23,6 +23,7 @@ #pragma once #include <sensors/ADS131M08/ADS131M08Data.h> +#include <sensors/MAX31856/MAX31856Data.h> namespace RIGv2 { @@ -41,7 +42,7 @@ struct ADCsData : Boardcore::ADS131M08Data static std::string header() { - return "timestamp,adc_number,voltage_channel_1,voltage_channel_2," + return "timestamp,adcNumber,voltage_channel_1,voltage_channel_2," "voltage_channel_3,voltage_channel_4,voltage_channel_5,voltage_" "channel_6,voltage_channel_7,voltage_channel_8\n"; } @@ -54,4 +55,30 @@ struct ADCsData : Boardcore::ADS131M08Data << voltage[7] << "\n"; } }; -} // namespace RIG \ No newline at end of file + +struct TCsData : Boardcore::MAX31856Data +{ + uint8_t tcNumber; + + TCsData() : MAX31856Data{0, 0}, tcNumber{0} {} + + TCsData(uint64_t time, uint8_t num, float temperature, + float coldJunctionTemperature) + : MAX31856Data{time, temperature, coldJunctionTemperature}, + tcNumber{num} + { + } + + static std::string header() + { + return "temperatureTimestamp,tcNumber,temperature," + "coldJunctionTemperature\n"; + } + + void print(std::ostream& os) const + { + os << temperatureTimestamp << "," << (int)tcNumber << "," << temperature + << "," << coldJunctionTemperature << "\n"; + } +}; +} // namespace RIGv2 \ No newline at end of file diff --git a/src/scripts/logdecoder/RIGv2/logdecoder.cpp b/src/scripts/logdecoder/RIGv2/logdecoder.cpp index fddfb7c20d0955d6f7f4393567819efa998e2b52..eab10f51c11e5b25893a3eeb31029ae54057ad06 100644 --- a/src/scripts/logdecoder/RIGv2/logdecoder.cpp +++ b/src/scripts/logdecoder/RIGv2/logdecoder.cpp @@ -52,6 +52,7 @@ void registerTypes(Deserializer& ds) // Custom types ds.registerType<ADCsData>(); + ds.registerType<TCsData>(); ds.registerType<ActuatorsData>(); }