add calibration routine for analog lever

This commit is contained in:
tyler miller 2025-01-14 15:27:59 -05:00
parent 4b0959ecaa
commit baf657a5f4
4 changed files with 84 additions and 2 deletions

View file

@ -0,0 +1,24 @@
/** \File SingleAxis.cpp
* \copyright (c) 2025 len0rd
* \date 2025-01-14
*/
#include "SingleAxis.hpp"
LinearSingleAxis::LinearSingleAxis(uint8_t analogPin)
: m_pin{analogPin},
m_cal{
.min = 0,
.max = 1 << 10,
} {}
uint16_t LinearSingleAxis::readRaw() {
return analogRead(m_pin);
}
uint8_t LinearSingleAxis::readPercent() {
return map(readRaw(), m_cal.min, m_cal.max, 0, 100);
}
void LinearSingleAxis::applyCalibration(const LinearAnalogCalibration& cal) {
m_cal = cal;
}

View file

@ -0,0 +1,31 @@
/** \File SingleAxis.hpp
* \copyright (c) 2025 len0rd
* \date 2025-01-14
*
* Simple utility class for reading a 'single axis' analog device. ie: a potentiometer
*/
#ifndef __SINGLEAXIS_H__
#define __SINGLEAXIS_H__
#include "Arduino.h"
#include "NvmEeprom.hpp"
class LinearSingleAxis {
public:
LinearSingleAxis(uint8_t analogPin);
uint16_t readRaw();
/// read as a percentage between calbirated min/max
/// Return a value 0-100
uint8_t readPercent();
/// Apply the provided calibration and use on subsequent @ref readPercent calls
void applyCalibration(const LinearAnalogCalibration& cal);
private:
uint8_t m_pin;
LinearAnalogCalibration m_cal;
};
#endif /* __SINGLEAXIS_H__ */