mirror of https://github.com/FOME-Tech/fome-fw.git
Debugging for sensor converter functions (#1239)
* func print * resistance func, func chain * formatting * resistance func format Co-authored-by: Matthew Kennedy <makenne@microsoft.com>
This commit is contained in:
parent
dc52d039e7
commit
44871c162c
|
@ -24,6 +24,10 @@ protected:
|
||||||
// Base case is the identity function
|
// Base case is the identity function
|
||||||
return {true, input};
|
return {true, input};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void showInfo(Logging* logger, float testInputValue) const {
|
||||||
|
// base case does nothing
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename TFirst, typename... TRest>
|
template <typename TFirst, typename... TRest>
|
||||||
|
@ -58,6 +62,17 @@ public:
|
||||||
return TBase::template get<TGet>();
|
return TBase::template get<TGet>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void showInfo(Logging* logger, float testInputValue) const {
|
||||||
|
// Print info about this level
|
||||||
|
m_f.showInfo(logger, testInputValue);
|
||||||
|
|
||||||
|
// If valid, recurse down
|
||||||
|
auto res = m_f.convert(testInputValue);
|
||||||
|
if (res.Valid) {
|
||||||
|
TBase::showInfo(logger, res.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TFirst m_f;
|
TFirst m_f;
|
||||||
};
|
};
|
||||||
|
@ -77,6 +92,10 @@ public:
|
||||||
return m_fs.template get<TGet>();
|
return m_fs.template get<TGet>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void showInfo(Logging* logger, float testInputValue) const override {
|
||||||
|
m_fs.showInfo(logger, testInputValue);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
priv::FuncChain<TFuncs...> m_fs;
|
priv::FuncChain<TFuncs...> m_fs;
|
||||||
};
|
};
|
||||||
|
|
|
@ -21,3 +21,9 @@ SensorResult LinearFunc::convert(float inputValue) const {
|
||||||
|
|
||||||
return {isValid, result};
|
return {isValid, result};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LinearFunc::showInfo(Logging* logger, float testRawValue) const {
|
||||||
|
scheduleMsg(logger, " Linear function slope: %.2f offset: %.2f min: %.1f max: %.1f", m_a, m_b, m_minOutput, m_maxOutput);
|
||||||
|
const auto [valid, value] = convert(testRawValue);
|
||||||
|
scheduleMsg(logger, " raw value %.2f converts to %.2f", testRawValue, value);
|
||||||
|
}
|
||||||
|
|
|
@ -10,6 +10,8 @@ public:
|
||||||
|
|
||||||
SensorResult convert(float inputValue) const override;
|
SensorResult convert(float inputValue) const override;
|
||||||
|
|
||||||
|
void showInfo(Logging* logger, float testRawValue) const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Linear equation parameters for equation of form
|
// Linear equation parameters for equation of form
|
||||||
// y = ax + b
|
// y = ax + b
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "resistance_func.h"
|
#include "resistance_func.h"
|
||||||
|
#include "loggingcentral.h"
|
||||||
|
|
||||||
void ResistanceFunc::configure(float supplyVoltage, float pullupResistor) {
|
void ResistanceFunc::configure(float supplyVoltage, float pullupResistor) {
|
||||||
m_pullupResistor = pullupResistor;
|
m_pullupResistor = pullupResistor;
|
||||||
|
@ -25,3 +26,8 @@ SensorResult ResistanceFunc::convert(float raw) const {
|
||||||
|
|
||||||
return {true, resistance};
|
return {true, resistance};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ResistanceFunc::showInfo(Logging* logger, float testInputValue) const {
|
||||||
|
const auto [valid, value] = convert(testInputValue);
|
||||||
|
scheduleMsg(logger, " %.2f volts -> %.1f ohms, with supply voltage %.2f and pullup %.1f.", testInputValue, value, m_supplyVoltage, m_pullupResistor);
|
||||||
|
}
|
||||||
|
|
|
@ -16,6 +16,8 @@ public:
|
||||||
|
|
||||||
SensorResult convert(float inputValue) const override;
|
SensorResult convert(float inputValue) const override;
|
||||||
|
|
||||||
|
void showInfo(Logging* logger, float testInputValue) const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
float m_supplyVoltage = 5.0f;
|
float m_supplyVoltage = 5.0f;
|
||||||
float m_pullupResistor = 1000.0f;
|
float m_pullupResistor = 1000.0f;
|
||||||
|
|
|
@ -2,6 +2,9 @@
|
||||||
|
|
||||||
#include "sensor.h"
|
#include "sensor.h"
|
||||||
|
|
||||||
|
class Logging;
|
||||||
|
|
||||||
struct SensorConverter {
|
struct SensorConverter {
|
||||||
virtual SensorResult convert(float raw) const = 0;
|
virtual SensorResult convert(float raw) const = 0;
|
||||||
|
virtual void showInfo(Logging* logger, float testRawValue) const {}
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* @author Matthew Kennedy, (c) 2019
|
* @author Matthew Kennedy, (c) 2019
|
||||||
*
|
*
|
||||||
* A function to convert resistance to thermistor temperature (NTC). Uses the
|
* A function to convert resistance to thermistor temperature (NTC). Uses the
|
||||||
* Steinhart-Hart equation to prevent having to compute many logarithms at runtime.
|
* Steinhart-Hart equation to avoid having to compute many logarithms at runtime.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
|
@ -10,4 +10,9 @@ void ProxySensor::showInfo(Logging* logger, const char* sensorName) const {
|
||||||
void FunctionalSensor::showInfo(Logging* logger, const char* sensorName) const {
|
void FunctionalSensor::showInfo(Logging* logger, const char* sensorName) const {
|
||||||
const auto [valid, value] = get();
|
const auto [valid, value] = get();
|
||||||
scheduleMsg(logger, "Sensor \"%s\": Raw value: %.2f Valid: %d Converted value %.2f", sensorName, m_rawValue, valid, value);
|
scheduleMsg(logger, "Sensor \"%s\": Raw value: %.2f Valid: %d Converted value %.2f", sensorName, m_rawValue, valid, value);
|
||||||
|
|
||||||
|
// now print out the underlying function's info
|
||||||
|
if (auto func = m_function) {
|
||||||
|
func->showInfo(logger, m_rawValue);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue