Files
guadaloop_lev_control/lib/IndSensorMap.hpp

47 lines
975 B
C++

#ifndef IND_SENSOR_MAP_HPP
#define IND_SENSOR_MAP_HPP
#include <stdint.h>
// Inductive Sensor Mapping Struct
typedef struct IndSensorMap {
float A;
float K;
float B;
float C;
float v;
// Pre-computed constants for faster toMM()
float invB; // 1.0 / B
float K_minus_A; // K - A
} IndSensorMap;
class IndSensor {
public:
bool oor;
float mmVal;
uint16_t analog;
float alpha; // EMA smoothing factor: 0-1, lower = more smoothing
// Constructor
IndSensor(IndSensorMap calibration, uint8_t analogPin, float emaAlpha = 0.3f);
// Read sensor directly from pin and convert to millimeters
float readMM();
private:
IndSensorMap consts;
uint8_t pin;
float filteredRaw;
// helper function to convert analog reading to millimeters
float toMM(uint16_t raw);
};
// sensor instances
extern IndSensor indL;
extern IndSensor indR;
extern IndSensor indF;
extern IndSensor indB;
#endif // IND_SENSOR_MAP_HPP