add calibration routine for analog lever
This commit is contained in:
parent
4b0959ecaa
commit
baf657a5f4
4 changed files with 84 additions and 2 deletions
24
lib/single_axis_control/SingleAxis.cpp
Normal file
24
lib/single_axis_control/SingleAxis.cpp
Normal 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;
|
||||
}
|
31
lib/single_axis_control/SingleAxis.hpp
Normal file
31
lib/single_axis_control/SingleAxis.hpp
Normal 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__ */
|
Loading…
Add table
Add a link
Reference in a new issue