This lib is supposed to be used as a sensor's calibration or control program. This makes Cubic Spline Model from some sample plots(sets of (value, voltage)), and then discretize the model (dividing the range of voltage into some steps) in order to use the calibrated model data without getting the INVERSE function.

Committer:
aktk
Date:
Mon Jun 06 10:27:42 2016 +0000
Revision:
4:701f958d137a
Parent:
3:b56e933bebc2
Child:
5:7d4fc0979976
debug,; printOut(no arg)-> printOut(filename);

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aktk 0:e85788b14028 1 /**
aktk 0:e85788b14028 2 * TRP105F_Spline.h,.cpp
aktk 0:e85788b14028 3 *
aktk 2:40ae18445079 4 * Author: aktk, aktk.j.uec@gmail.com
aktk 2:40ae18445079 5 * Tokyo, Japan.
aktk 2:40ae18445079 6 *
aktk 2:40ae18445079 7 * - This library is for providing a distance from TRP105F, photo-reflect proximity sensor,
aktk 0:e85788b14028 8 * to whatever reflect the flash.
aktk 2:40ae18445079 9 * - Deistance is derived as a voltage signal of TRP105F.
aktk 0:e85788b14028 10 * - An object of TRPFS class has an array of sets of
aktk 0:e85788b14028 11 * distance(16 bit-value) and voltage(16bit-value) at the distance.
aktk 2:40ae18445079 12 * - The range of distances that an array has in sets is [0:255] by 1.
aktk 2:40ae18445079 13 * - an array is derived from a cubic spline curve model.
aktk 0:e85788b14028 14 * - In order to derive spline curve, some value sets should be got
aktk 0:e85788b14028 15 * at the first calibration.
aktk 0:e85788b14028 16 *
aktk 0:e85788b14028 17 * LOG:
aktk 0:e85788b14028 18 * ver.1 2015/10/19 - 2015/10/22
aktk 0:e85788b14028 19 * ver.2 2015/10/22 -
aktk 0:e85788b14028 20 * Distance data type has become unsigned short from int.
aktk 0:e85788b14028 21 * Distance data range : [2:20] by 1 -> [0:1024] by 1.
aktk 2:40ae18445079 22 * ver.2.1 2016/02.12 - 2016/02/16
aktk 1:2053662b1167 23 * Distance data range : [0:1024] -> [0:255].
aktk 4:701f958d137a 24 * ver.3.0 2016/05.23 -
aktk 0:e85788b14028 25 */
aktk 0:e85788b14028 26 #ifndef TRP105F_Spline_H
aktk 0:e85788b14028 27 #define TRP105F_Spline_H
aktk 0:e85788b14028 28
aktk 0:e85788b14028 29 #include "mbed.h"
aktk 0:e85788b14028 30
aktk 0:e85788b14028 31
aktk 3:b56e933bebc2 32 // For SPI
aktk 3:b56e933bebc2 33 //int DAread(int channel);
aktk 3:b56e933bebc2 34
aktk 0:e85788b14028 35 // Set of voltage-distance
aktk 0:e85788b14028 36 typedef struct {
aktk 3:b56e933bebc2 37 unsigned short x; // distance
aktk 3:b56e933bebc2 38 unsigned short y; // voltage
aktk 0:e85788b14028 39 } VDset;
aktk 0:e85788b14028 40
aktk 1:2053662b1167 41 // Type of modality to input data for calibration
aktk 3:b56e933bebc2 42 enum UseType {
aktk 3:b56e933bebc2 43 AsDEBUG,
aktk 3:b56e933bebc2 44 AsMODULE
aktk 0:e85788b14028 45 } ;
aktk 0:e85788b14028 46
aktk 0:e85788b14028 47 //
aktk 0:e85788b14028 48 // TRP105FS Class for get distance from voltage
aktk 2:40ae18445079 49 //
aktk 0:e85788b14028 50 class TRP105FS
aktk 0:e85788b14028 51 {
aktk 0:e85788b14028 52 public:
aktk 1:2053662b1167 53 // Constraction
aktk 0:e85788b14028 54 TRP105FS();
aktk 0:e85788b14028 55 TRP105FS(unsigned int);
aktk 3:b56e933bebc2 56 TRP105FS(unsigned int, UseType);
aktk 3:b56e933bebc2 57 TRP105FS(unsigned int, UseType, PinName);
aktk 3:b56e933bebc2 58 //TRP105FS(unsigned int arg_num, DataInType arg_dit, unsigned int channel);
aktk 1:2053662b1167 59 // Destraction
aktk 0:e85788b14028 60 ~TRP105FS();
aktk 1:2053662b1167 61 // Functions
aktk 3:b56e933bebc2 62 unsigned short getDistance(unsigned short); // alias of getX
aktk 3:b56e933bebc2 63 unsigned short getDistance(); // get voltage from PinName and getX()
aktk 3:b56e933bebc2 64 unsigned short getX(unsigned short); // the fuction to get distance.
aktk 3:b56e933bebc2 65 unsigned short getY(unsigned short);
aktk 0:e85788b14028 66 void calibrateSensor();
aktk 3:b56e933bebc2 67 //void calibrateSensor(VDset* arg_set, unsigned int arg_num);
aktk 3:b56e933bebc2 68 void calibrate();
aktk 3:b56e933bebc2 69 void setSample(unsigned short,unsigned short);
aktk 0:e85788b14028 70 void saveSetting();
aktk 1:2053662b1167 71 void saveSetting(const char *filename);
aktk 0:e85788b14028 72 void loadSetting();
aktk 1:2053662b1167 73 void loadSetting(const char *filename);
aktk 0:e85788b14028 74 void printOutData();
aktk 0:e85788b14028 75 void printThresholds();
aktk 0:e85788b14028 76
aktk 0:e85788b14028 77 private:
aktk 1:2053662b1167 78 //
aktk 1:2053662b1167 79 // Defining Constants
aktk 1:2053662b1167 80 //
aktk 0:e85788b14028 81 enum _SetConstant {
aktk 0:e85788b14028 82 _LIDX = 0,
aktk 1:2053662b1167 83 _RIDX = 255,
aktk 0:e85788b14028 84 _ENUM = _RIDX - _LIDX + 1
aktk 0:e85788b14028 85 };
aktk 1:2053662b1167 86 //
aktk 1:2053662b1167 87 // Variables
aktk 1:2053662b1167 88 //
aktk 3:b56e933bebc2 89 UseType _useType;
aktk 3:b56e933bebc2 90 unsigned int _Sample_Num; // the number of samples for derive spline
aktk 3:b56e933bebc2 91 VDset* _Sample_Set;
aktk 3:b56e933bebc2 92 VDset _Set[_ENUM];
aktk 3:b56e933bebc2 93 unsigned short _Threshold[_ENUM]; //_Threshold[18] is not used virtually.
aktk 3:b56e933bebc2 94 double* _u_spline;
aktk 3:b56e933bebc2 95 //
aktk 3:b56e933bebc2 96 // Variable for spi
aktk 3:b56e933bebc2 97 //
aktk 3:b56e933bebc2 98 //unsigned int _channel;
aktk 0:e85788b14028 99 //
aktk 0:e85788b14028 100 // For calibration
aktk 0:e85788b14028 101 //
aktk 0:e85788b14028 102 void _sampleData();
aktk 3:b56e933bebc2 103 void _setSample(unsigned short,unsigned short);
aktk 3:b56e933bebc2 104 void _setSamples(VDset* arg_set, unsigned int arg_num);
aktk 3:b56e933bebc2 105 unsigned short _getSplineYof(double arg_x);
aktk 0:e85788b14028 106 void _makeSpline(); // Cubic spline
aktk 0:e85788b14028 107 //
aktk 0:e85788b14028 108 // For get distance
aktk 0:e85788b14028 109 //
aktk 0:e85788b14028 110 int _getNearest(int, int, unsigned short);
aktk 0:e85788b14028 111 //
aktk 1:2053662b1167 112 // For debug
aktk 1:2053662b1167 113 //
aktk 0:e85788b14028 114 void _printOutData(unsigned short *arg, int num, char* name);
aktk 0:e85788b14028 115 void _printOutData(VDset *arg, int num, char* name);
aktk 0:e85788b14028 116 void _printOutData(double *arg, int num, char* name);
aktk 0:e85788b14028 117 };
aktk 0:e85788b14028 118 #endif