diff --git a/src/shared/sensors/analog/AnalogLoadCell.h b/src/shared/sensors/analog/AnalogLoadCell.h index 92a6752501abd0c46ac9d29314f17ef8f399089e..53d0dc42430fc7e4f37528941039c666e15d26a2 100644 --- a/src/shared/sensors/analog/AnalogLoadCell.h +++ b/src/shared/sensors/analog/AnalogLoadCell.h @@ -45,6 +45,11 @@ public: bool selfTest() override { return true; }; + /** + * @brief Sets the offset that will be removed from the measured load. + */ + void setOffset(const float offset) { this->offset = offset; } + AnalogLoadCellData sampleImpl() override { ADCData adcData = getVoltage(); @@ -53,14 +58,20 @@ public: data.loadTimestamp = adcData.voltageTimestamp; data.voltage = adcData.voltage; - data.load = data.voltage / conversionCoeff; + if (data.voltage != 0) + data.load = data.voltage / conversionCoeff - offset; + else + data.load = -offset; return data; } private: + ///< Function that returns the sensor voltage. std::function<ADCData()> getVoltage; + const float conversionCoeff; + float offset = 0; }; } // namespace Boardcore diff --git a/src/shared/sensors/analog/pressure/AnalogPressureSensor.h b/src/shared/sensors/analog/pressure/AnalogPressureSensor.h index a4246801f189c10507c5679990607dd085b157e3..7695aeb972f560f06e9a28450d4991596430131c 100644 --- a/src/shared/sensors/analog/pressure/AnalogPressureSensor.h +++ b/src/shared/sensors/analog/pressure/AnalogPressureSensor.h @@ -52,7 +52,11 @@ public: bool selfTest() override { return true; } - ///< Converts the voltage value to pressure + /** + * @brief Sets the offset that will be removed from the measured pressure. + */ + void setOffset(const float offset) { this->offset = offset; } + AnalogPressureData sampleImpl() override { AnalogPressureData pressure; @@ -70,19 +74,22 @@ public: else if (pressure.pressure > maxPressure) pressure.pressure = maxPressure; + pressure.pressure -= offset; + return pressure; } protected: - ///< Conversion function from volts to pascals + ///< Conversion function from volts to pascals. virtual float voltageToPressure(float voltage) = 0; - ///< Function that returns the sensor voltage + ///< Function that returns the sensor voltage. std::function<ADCData()> getVoltage; const float supplyVoltage; const float maxPressure; const float minPressure; + float offset = 0; }; } // namespace Boardcore