heave control + plotter
This commit is contained in:
47
embedded/lib/IndSensorLUT.hpp
Normal file
47
embedded/lib/IndSensorLUT.hpp
Normal file
@@ -0,0 +1,47 @@
|
||||
#ifndef IND_SENSOR_LUT_HPP
|
||||
#define IND_SENSOR_LUT_HPP
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
// Piecewise-linear LUT calibration for an inductive sensor.
|
||||
// adcTable is ADC value at mm = mmMin + i*mmStep, monotonically increasing in i.
|
||||
typedef struct IndSensorLUT {
|
||||
const uint16_t* adcTable;
|
||||
uint16_t length;
|
||||
float mmMin;
|
||||
float mmStep;
|
||||
} IndSensorLUT;
|
||||
|
||||
class IndSensorL {
|
||||
public:
|
||||
bool oor;
|
||||
int8_t oorDir; // -1 = too close (below LUT), +1 = too far (above LUT), 0 = in range
|
||||
float mmVal;
|
||||
uint16_t analog;
|
||||
float alpha;
|
||||
|
||||
IndSensorL(IndSensorLUT calibration, uint8_t analogPin, float emaAlpha = 0.3f);
|
||||
float readMM();
|
||||
|
||||
private:
|
||||
IndSensorLUT cal;
|
||||
uint8_t pin;
|
||||
float filteredRaw;
|
||||
|
||||
float toMM(uint16_t raw);
|
||||
};
|
||||
|
||||
// Per-sensor LUTs generated from A0Calibration/data (4.0..18.0 mm @ 0.1 mm).
|
||||
extern const IndSensorLUT ind0LUTCal;
|
||||
extern const IndSensorLUT ind1LUTCal;
|
||||
extern const IndSensorLUT ind2LUTCal;
|
||||
extern const IndSensorLUT ind5LUTCal;
|
||||
|
||||
// Sensor instances — face → pin/LUT mapping defined in IndSensorLUT.cpp.
|
||||
// Names shadow IndSensorMap; do not include both headers in the same sketch.
|
||||
extern IndSensorL indF;
|
||||
extern IndSensorL indB;
|
||||
extern IndSensorL indL;
|
||||
extern IndSensorL indR;
|
||||
|
||||
#endif // IND_SENSOR_LUT_HPP
|
||||
Reference in New Issue
Block a user