for child

Fork of TRP105F_Spline by Akifumi Takahashi

Committer:
aktk
Date:
Wed Jun 08 11:32:29 2016 +0000
Revision:
16:c2b0f3ca63dd
Parent:
14:a99bf22b919d
Child:
17:f6ec7796dafd
getDistance(any), getVoltage() have come to be inline function.

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 11:d60fb729eacf 24 * ver.3.0 2016/05.23 -
aktk 0:e85788b14028 25 */
aktk 11:d60fb729eacf 26
aktk 11:d60fb729eacf 27 #ifndef TRP105F_SPLINE_H
aktk 11:d60fb729eacf 28 #define TRP105F_SPLINE_H
aktk 0:e85788b14028 29
aktk 9:ec1ee4a6b6a4 30
aktk 0:e85788b14028 31 #include "mbed.h"
aktk 11:d60fb729eacf 32 #include "CODE_SELECTIVE.h"
aktk 0:e85788b14028 33
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 10:b50e4bb40571 57 TRP105FS(unsigned int, PinName);
aktk 3:b56e933bebc2 58 TRP105FS(unsigned int, UseType, PinName);
aktk 3:b56e933bebc2 59 //TRP105FS(unsigned int arg_num, DataInType arg_dit, unsigned int channel);
aktk 1:2053662b1167 60 // Destraction
aktk 0:e85788b14028 61 ~TRP105FS();
aktk 1:2053662b1167 62 // Functions
aktk 3:b56e933bebc2 63 unsigned short getDistance(unsigned short); // alias of getX
aktk 16:c2b0f3ca63dd 64 unsigned short getDistance(); // get voltage from PinName and getX()
aktk 16:c2b0f3ca63dd 65 unsigned short getVoltage(); // get voltage
aktk 16:c2b0f3ca63dd 66 unsigned short getX(unsigned short); // the fuction to get distance.
aktk 16:c2b0f3ca63dd 67 unsigned short getY(unsigned short); // get y-spline_model value of x(argument)
aktk 14:a99bf22b919d 68 unsigned short getSampleNum();
aktk 0:e85788b14028 69 void calibrateSensor();
aktk 3:b56e933bebc2 70 //void calibrateSensor(VDset* arg_set, unsigned int arg_num);
aktk 3:b56e933bebc2 71 void calibrate();
aktk 3:b56e933bebc2 72 void setSample(unsigned short,unsigned short);
aktk 14:a99bf22b919d 73 #ifdef HAS_LOCAL_FILE_SYSTEM
aktk 14:a99bf22b919d 74 void printOutData(const char* filename);
aktk 0:e85788b14028 75 void saveSetting();
aktk 0:e85788b14028 76 void loadSetting();
aktk 14:a99bf22b919d 77 void saveSetting(const char* filename);
aktk 14:a99bf22b919d 78 void loadSetting(const char* filename);
aktk 14:a99bf22b919d 79 //void saveSetting_fromSirial(const char* filename, Serial* com);
aktk 14:a99bf22b919d 80 //void loadSetting_intoSerial(const char* filename, Serial* com);
aktk 14:a99bf22b919d 81 #endif
aktk 14:a99bf22b919d 82 void saveSetting_intoSerial(Serial *com);
aktk 12:db5110d9d494 83 void loadSetting_fromSerial(Serial *com);
aktk 11:d60fb729eacf 84 #ifdef HAS_COM_TO_CONSOLE
aktk 0:e85788b14028 85 void printThresholds();
aktk 11:d60fb729eacf 86 #endif
aktk 0:e85788b14028 87
aktk 0:e85788b14028 88 private:
aktk 1:2053662b1167 89 //
aktk 1:2053662b1167 90 // Defining Constants
aktk 1:2053662b1167 91 //
aktk 13:16fc61b41eff 92 enum {
aktk 0:e85788b14028 93 _LIDX = 0,
aktk 1:2053662b1167 94 _RIDX = 255,
aktk 0:e85788b14028 95 _ENUM = _RIDX - _LIDX + 1
aktk 0:e85788b14028 96 };
aktk 1:2053662b1167 97 //
aktk 1:2053662b1167 98 // Variables
aktk 1:2053662b1167 99 //
aktk 9:ec1ee4a6b6a4 100 // Debug or Module
aktk 3:b56e933bebc2 101 UseType _useType;
aktk 9:ec1ee4a6b6a4 102 // For data sampling and making spline model
aktk 13:16fc61b41eff 103 unsigned short _Sample_Num; // the number of samples for derive spline
aktk 3:b56e933bebc2 104 VDset* _Sample_Set;
aktk 9:ec1ee4a6b6a4 105 double* _u_spline;
aktk 9:ec1ee4a6b6a4 106 // For comvert voltage -> physical quantity e.g. distance
aktk 3:b56e933bebc2 107 VDset _Set[_ENUM];
aktk 3:b56e933bebc2 108 unsigned short _Threshold[_ENUM]; //_Threshold[18] is not used virtually.
aktk 9:ec1ee4a6b6a4 109 // For get voltage
aktk 9:ec1ee4a6b6a4 110 AnalogIn _ai;
aktk 3:b56e933bebc2 111 //
aktk 0:e85788b14028 112 //
aktk 0:e85788b14028 113 // For calibration
aktk 0:e85788b14028 114 //
aktk 11:d60fb729eacf 115 #ifdef HAS_COM_TO_CONSOLE
aktk 0:e85788b14028 116 void _sampleData();
aktk 11:d60fb729eacf 117 #endif
aktk 3:b56e933bebc2 118 void _setSample(unsigned short,unsigned short);
aktk 3:b56e933bebc2 119 void _setSamples(VDset* arg_set, unsigned int arg_num);
aktk 3:b56e933bebc2 120 unsigned short _getSplineYof(double arg_x);
aktk 0:e85788b14028 121 void _makeSpline(); // Cubic spline
aktk 0:e85788b14028 122 //
aktk 0:e85788b14028 123 // For get distance
aktk 0:e85788b14028 124 //
aktk 0:e85788b14028 125 int _getNearest(int, int, unsigned short);
aktk 0:e85788b14028 126 //
aktk 1:2053662b1167 127 // For debug
aktk 1:2053662b1167 128 //
aktk 14:a99bf22b919d 129 #ifdef HAS_LOCAL_FILE_SYSTEM
aktk 0:e85788b14028 130 void _printOutData(unsigned short *arg, int num, char* name);
aktk 0:e85788b14028 131 void _printOutData(VDset *arg, int num, char* name);
aktk 0:e85788b14028 132 void _printOutData(double *arg, int num, char* name);
aktk 14:a99bf22b919d 133 #endif
aktk 0:e85788b14028 134 };
aktk 16:c2b0f3ca63dd 135
aktk 16:c2b0f3ca63dd 136 //inline implemeted
aktk 16:c2b0f3ca63dd 137
aktk 16:c2b0f3ca63dd 138 inline unsigned short TRP105FS::getDistance(unsigned short arg_y)
aktk 16:c2b0f3ca63dd 139 {
aktk 16:c2b0f3ca63dd 140 return getX(arg_y);
aktk 16:c2b0f3ca63dd 141 }
aktk 16:c2b0f3ca63dd 142
aktk 16:c2b0f3ca63dd 143 inline unsigned short TRP105FS::getDistance()
aktk 16:c2b0f3ca63dd 144 {
aktk 16:c2b0f3ca63dd 145 return getX(_ai.read_u16());
aktk 16:c2b0f3ca63dd 146 }
aktk 16:c2b0f3ca63dd 147
aktk 16:c2b0f3ca63dd 148 inline unsigned short TRP105FS::getVoltage()
aktk 16:c2b0f3ca63dd 149 {
aktk 16:c2b0f3ca63dd 150 return _ai.read_u16();
aktk 16:c2b0f3ca63dd 151 }
aktk 16:c2b0f3ca63dd 152
aktk 0:e85788b14028 153 #endif