This lib is considered to be used as a sensor's calibration program. Calibration with Spline Interpolation might be useful in the case that you want some model expressing relationship such like between a value of physical quantity and your sensor's voltage, but you cannot estimate a model such as liner, square, cubic polynomial, or sine curve. This makes (Parametric) Cubic Spline Polynomial Model (Coefficients of the polynomial) from some sample plots(e.g. sets of (value, voltage)). The inverse function (x,y)->(y,x) has been implemented so as to get analog data (not stepping or leveled data).

Fork of TRP105F_Spline by Akifumi Takahashi

Committer:
aktk
Date:
Thu May 12 14:41:15 2016 +0000
Revision:
3:75f50dbedf1b
Child:
4:8db89b731133
refactoring as CubicSpline from TRP105F_Spline;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aktk 3:75f50dbedf1b 1 /**
aktk 3:75f50dbedf1b 2 * Spline_Cubic.h,.cpp
aktk 3:75f50dbedf1b 3 *
aktk 3:75f50dbedf1b 4 * Author: aktk, aktk.j.uec@gmail.com
aktk 3:75f50dbedf1b 5 * Tokyo, Japan.
aktk 3:75f50dbedf1b 6 *
aktk 3:75f50dbedf1b 7 * LOG:
aktk 3:75f50dbedf1b 8 * ver.0 2016/02.12 - 2016/02/16
aktk 3:75f50dbedf1b 9 * TRP105F_Spline.h,.cpp(Ver.2.1)
aktk 3:75f50dbedf1b 10 * ver.1 2016/05.12
aktk 3:75f50dbedf1b 11 */
aktk 3:75f50dbedf1b 12 #ifndef Cubic_Spline_H
aktk 3:75f50dbedf1b 13 #define Cubic_Spline_H
aktk 3:75f50dbedf1b 14
aktk 3:75f50dbedf1b 15 #include "mbed.h"
aktk 3:75f50dbedf1b 16
aktk 3:75f50dbedf1b 17
aktk 3:75f50dbedf1b 18 // Vector Element Type
aktk 3:75f50dbedf1b 19 typedef struct {
aktk 3:75f50dbedf1b 20 unsigned short x; //
aktk 3:75f50dbedf1b 21 unsigned short y; // distance
aktk 3:75f50dbedf1b 22 } Vector2d;
aktk 3:75f50dbedf1b 23
aktk 3:75f50dbedf1b 24 enum UseType{
aktk 3:75f50dbedf1b 25 AsDEBUG,
aktk 3:75f50dbedf1b 26 AsMODULE
aktk 3:75f50dbedf1b 27 };
aktk 3:75f50dbedf1b 28
aktk 3:75f50dbedf1b 29 class Spline_2dCubic
aktk 3:75f50dbedf1b 30 {
aktk 3:75f50dbedf1b 31 public:
aktk 3:75f50dbedf1b 32 // Constraction
aktk 3:75f50dbedf1b 33 Spline_2dCubic();
aktk 3:75f50dbedf1b 34 Spline_2dCubic(unsigned int);
aktk 3:75f50dbedf1b 35 Spline_2dCubic(unsigned int arg_NumSample, UseType arg_dit);
aktk 3:75f50dbedf1b 36 // Destraction
aktk 3:75f50dbedf1b 37 ~Spline_2dCubic();
aktk 3:75f50dbedf1b 38 // Functions
aktk 3:75f50dbedf1b 39 unsigned short getX();
aktk 3:75f50dbedf1b 40 unsigned short getY();
aktk 3:75f50dbedf1b 41 void calibrateSensor();
aktk 3:75f50dbedf1b 42 void saveSetting();
aktk 3:75f50dbedf1b 43 void saveSetting(const char *filename);
aktk 3:75f50dbedf1b 44 void loadSetting();
aktk 3:75f50dbedf1b 45 void loadSetting(const char *filename);
aktk 3:75f50dbedf1b 46 void printOutData();
aktk 3:75f50dbedf1b 47 void printThresholds();
aktk 3:75f50dbedf1b 48
aktk 3:75f50dbedf1b 49 private:
aktk 3:75f50dbedf1b 50 //
aktk 3:75f50dbedf1b 51 // Variables
aktk 3:75f50dbedf1b 52 //
aktk 3:75f50dbedf1b 53 unsigned int _Sample_Num; // the number of samples for derive spline
aktk 3:75f50dbedf1b 54 Vector2d* _Sample_Set;
aktk 3:75f50dbedf1b 55 UseType _useType;
aktk 3:75f50dbedf1b 56 double* _u_param;
aktk 3:75f50dbedf1b 57 //
aktk 3:75f50dbedf1b 58 // For calibration
aktk 3:75f50dbedf1b 59 //
aktk 3:75f50dbedf1b 60 void _sampleData();
aktk 3:75f50dbedf1b 61 void _makeSpline(); // Cubic spline
aktk 3:75f50dbedf1b 62 unsigned short _getSplineYof(double);
aktk 3:75f50dbedf1b 63 //
aktk 3:75f50dbedf1b 64 // For get distance
aktk 3:75f50dbedf1b 65 //
aktk 3:75f50dbedf1b 66 int _getNearest(int, int, unsigned short);
aktk 3:75f50dbedf1b 67 //
aktk 3:75f50dbedf1b 68 // For debug
aktk 3:75f50dbedf1b 69 //
aktk 3:75f50dbedf1b 70 void _printOutData(unsigned short *arg, int num, char* name);
aktk 3:75f50dbedf1b 71 void _printOutData(VDset *arg, int num, char* name);
aktk 3:75f50dbedf1b 72 void _printOutData(double *arg, int num, char* name);
aktk 3:75f50dbedf1b 73 };
aktk 3:75f50dbedf1b 74 #endif