for child
Fork of TRP105F_Spline by
TRP105F_Spline.h@27:1f38ee841153, 2017-10-24 (annotated)
- Committer:
- tanaken0605
- Date:
- Tue Oct 24 00:44:39 2017 +0000
- Revision:
- 27:1f38ee841153
- Parent:
- 20:0453919a76b2
?????????
Who changed what in which revision?
User | Revision | Line number | New 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 | 17:f6ec7796dafd | 12 | * - The range of distances that an array has in sets is [LIDX:RIDX] 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 | 17:f6ec7796dafd | 22 | * ver.2.1 2016/02/12 - 2016/02/16 |
aktk | 1:2053662b1167 | 23 | * Distance data range : [0:1024] -> [0:255]. |
aktk | 17:f6ec7796dafd | 24 | * ver.3.0 2016/05/23 - 2016/06/08 |
aktk | 17:f6ec7796dafd | 25 | * Some Functions modified a lot. Even same name function might become uncompatible!!!!! |
aktk | 17:f6ec7796dafd | 26 | * (in order to make it be extensivly) |
aktk | 17:f6ec7796dafd | 27 | * Following are Implemented: |
aktk | 17:f6ec7796dafd | 28 | * -Functions relating to save/load data with serial |
aktk | 17:f6ec7796dafd | 29 | * -Some New Members: _ai, or so on. |
aktk | 17:f6ec7796dafd | 30 | * -enum UseType |
aktk | 17:f6ec7796dafd | 31 | * |
aktk | 0:e85788b14028 | 32 | */ |
aktk | 11:d60fb729eacf | 33 | |
aktk | 11:d60fb729eacf | 34 | #ifndef TRP105F_SPLINE_H |
aktk | 11:d60fb729eacf | 35 | #define TRP105F_SPLINE_H |
aktk | 0:e85788b14028 | 36 | |
aktk | 9:ec1ee4a6b6a4 | 37 | |
aktk | 0:e85788b14028 | 38 | #include "mbed.h" |
aktk | 11:d60fb729eacf | 39 | #include "CODE_SELECTIVE.h" |
aktk | 0:e85788b14028 | 40 | |
aktk | 3:b56e933bebc2 | 41 | |
aktk | 0:e85788b14028 | 42 | // Set of voltage-distance |
aktk | 0:e85788b14028 | 43 | typedef struct { |
aktk | 3:b56e933bebc2 | 44 | unsigned short x; // distance |
aktk | 3:b56e933bebc2 | 45 | unsigned short y; // voltage |
aktk | 0:e85788b14028 | 46 | } VDset; |
aktk | 0:e85788b14028 | 47 | |
aktk | 1:2053662b1167 | 48 | // Type of modality to input data for calibration |
aktk | 3:b56e933bebc2 | 49 | enum UseType { |
aktk | 3:b56e933bebc2 | 50 | AsDEBUG, |
aktk | 3:b56e933bebc2 | 51 | AsMODULE |
aktk | 0:e85788b14028 | 52 | } ; |
aktk | 0:e85788b14028 | 53 | |
aktk | 0:e85788b14028 | 54 | // |
aktk | 0:e85788b14028 | 55 | // TRP105FS Class for get distance from voltage |
aktk | 2:40ae18445079 | 56 | // |
aktk | 0:e85788b14028 | 57 | class TRP105FS |
aktk | 0:e85788b14028 | 58 | { |
aktk | 0:e85788b14028 | 59 | public: |
aktk | 1:2053662b1167 | 60 | // Constraction |
aktk | 0:e85788b14028 | 61 | TRP105FS(); |
aktk | 18:b046bba4ffa7 | 62 | TRP105FS(unsigned short); |
aktk | 18:b046bba4ffa7 | 63 | TRP105FS(unsigned short, UseType); |
aktk | 18:b046bba4ffa7 | 64 | TRP105FS(unsigned short, PinName); |
aktk | 18:b046bba4ffa7 | 65 | TRP105FS(unsigned short, UseType, PinName); |
aktk | 3:b56e933bebc2 | 66 | //TRP105FS(unsigned int arg_num, DataInType arg_dit, unsigned int channel); |
aktk | 1:2053662b1167 | 67 | // Destraction |
aktk | 0:e85788b14028 | 68 | ~TRP105FS(); |
aktk | 1:2053662b1167 | 69 | // Functions |
aktk | 3:b56e933bebc2 | 70 | unsigned short getDistance(unsigned short); // alias of getX |
aktk | 16:c2b0f3ca63dd | 71 | unsigned short getDistance(); // get voltage from PinName and getX() |
aktk | 16:c2b0f3ca63dd | 72 | unsigned short getVoltage(); // get voltage |
aktk | 16:c2b0f3ca63dd | 73 | unsigned short getX(unsigned short); // the fuction to get distance. |
aktk | 16:c2b0f3ca63dd | 74 | unsigned short getY(unsigned short); // get y-spline_model value of x(argument) |
aktk | 14:a99bf22b919d | 75 | unsigned short getSampleNum(); |
aktk | 0:e85788b14028 | 76 | void calibrateSensor(); |
aktk | 3:b56e933bebc2 | 77 | //void calibrateSensor(VDset* arg_set, unsigned int arg_num); |
aktk | 3:b56e933bebc2 | 78 | void calibrate(); |
aktk | 3:b56e933bebc2 | 79 | void setSample(unsigned short,unsigned short); |
aktk | 14:a99bf22b919d | 80 | #ifdef HAS_LOCAL_FILE_SYSTEM |
aktk | 14:a99bf22b919d | 81 | void printOutData(const char* filename); |
aktk | 0:e85788b14028 | 82 | void saveSetting(); |
aktk | 0:e85788b14028 | 83 | void loadSetting(); |
aktk | 14:a99bf22b919d | 84 | void saveSetting(const char* filename); |
aktk | 14:a99bf22b919d | 85 | void loadSetting(const char* filename); |
aktk | 14:a99bf22b919d | 86 | //void saveSetting_fromSirial(const char* filename, Serial* com); |
aktk | 14:a99bf22b919d | 87 | //void loadSetting_intoSerial(const char* filename, Serial* com); |
aktk | 14:a99bf22b919d | 88 | #endif |
aktk | 14:a99bf22b919d | 89 | void saveSetting_intoSerial(Serial *com); |
aktk | 12:db5110d9d494 | 90 | void loadSetting_fromSerial(Serial *com); |
aktk | 11:d60fb729eacf | 91 | #ifdef HAS_COM_TO_CONSOLE |
aktk | 0:e85788b14028 | 92 | void printThresholds(); |
aktk | 11:d60fb729eacf | 93 | #endif |
aktk | 0:e85788b14028 | 94 | |
aktk | 0:e85788b14028 | 95 | private: |
aktk | 1:2053662b1167 | 96 | // |
aktk | 1:2053662b1167 | 97 | // Defining Constants |
aktk | 1:2053662b1167 | 98 | // |
aktk | 13:16fc61b41eff | 99 | enum { |
aktk | 0:e85788b14028 | 100 | _LIDX = 0, |
aktk | 1:2053662b1167 | 101 | _RIDX = 255, |
aktk | 0:e85788b14028 | 102 | _ENUM = _RIDX - _LIDX + 1 |
aktk | 0:e85788b14028 | 103 | }; |
aktk | 1:2053662b1167 | 104 | // |
aktk | 1:2053662b1167 | 105 | // Variables |
aktk | 1:2053662b1167 | 106 | // |
aktk | 9:ec1ee4a6b6a4 | 107 | // Debug or Module |
aktk | 3:b56e933bebc2 | 108 | UseType _useType; |
aktk | 9:ec1ee4a6b6a4 | 109 | // For data sampling and making spline model |
aktk | 13:16fc61b41eff | 110 | unsigned short _Sample_Num; // the number of samples for derive spline |
aktk | 20:0453919a76b2 | 111 | unsigned short _snum; // for counting set sample data by _setSample(us,us); |
aktk | 3:b56e933bebc2 | 112 | VDset* _Sample_Set; |
aktk | 9:ec1ee4a6b6a4 | 113 | double* _u_spline; |
aktk | 9:ec1ee4a6b6a4 | 114 | // For comvert voltage -> physical quantity e.g. distance |
aktk | 3:b56e933bebc2 | 115 | VDset _Set[_ENUM]; |
aktk | 3:b56e933bebc2 | 116 | unsigned short _Threshold[_ENUM]; //_Threshold[18] is not used virtually. |
aktk | 9:ec1ee4a6b6a4 | 117 | // For get voltage |
aktk | 9:ec1ee4a6b6a4 | 118 | AnalogIn _ai; |
aktk | 3:b56e933bebc2 | 119 | // |
aktk | 0:e85788b14028 | 120 | // |
aktk | 0:e85788b14028 | 121 | // For calibration |
aktk | 0:e85788b14028 | 122 | // |
aktk | 11:d60fb729eacf | 123 | #ifdef HAS_COM_TO_CONSOLE |
aktk | 0:e85788b14028 | 124 | void _sampleData(); |
aktk | 11:d60fb729eacf | 125 | #endif |
aktk | 3:b56e933bebc2 | 126 | void _setSample(unsigned short,unsigned short); |
aktk | 3:b56e933bebc2 | 127 | void _setSamples(VDset* arg_set, unsigned int arg_num); |
aktk | 3:b56e933bebc2 | 128 | unsigned short _getSplineYof(double arg_x); |
aktk | 0:e85788b14028 | 129 | void _makeSpline(); // Cubic spline |
aktk | 0:e85788b14028 | 130 | // |
aktk | 0:e85788b14028 | 131 | // For get distance |
aktk | 0:e85788b14028 | 132 | // |
aktk | 0:e85788b14028 | 133 | int _getNearest(int, int, unsigned short); |
aktk | 0:e85788b14028 | 134 | // |
aktk | 1:2053662b1167 | 135 | // For debug |
aktk | 1:2053662b1167 | 136 | // |
aktk | 14:a99bf22b919d | 137 | #ifdef HAS_LOCAL_FILE_SYSTEM |
aktk | 0:e85788b14028 | 138 | void _printOutData(unsigned short *arg, int num, char* name); |
aktk | 0:e85788b14028 | 139 | void _printOutData(VDset *arg, int num, char* name); |
aktk | 0:e85788b14028 | 140 | void _printOutData(double *arg, int num, char* name); |
aktk | 14:a99bf22b919d | 141 | #endif |
aktk | 0:e85788b14028 | 142 | }; |
aktk | 16:c2b0f3ca63dd | 143 | |
aktk | 16:c2b0f3ca63dd | 144 | //inline implemeted |
aktk | 16:c2b0f3ca63dd | 145 | |
aktk | 16:c2b0f3ca63dd | 146 | inline unsigned short TRP105FS::getDistance(unsigned short arg_y) |
aktk | 16:c2b0f3ca63dd | 147 | { |
aktk | 16:c2b0f3ca63dd | 148 | return getX(arg_y); |
aktk | 16:c2b0f3ca63dd | 149 | } |
aktk | 16:c2b0f3ca63dd | 150 | |
aktk | 16:c2b0f3ca63dd | 151 | inline unsigned short TRP105FS::getDistance() |
aktk | 16:c2b0f3ca63dd | 152 | { |
aktk | 16:c2b0f3ca63dd | 153 | return getX(_ai.read_u16()); |
aktk | 16:c2b0f3ca63dd | 154 | } |
aktk | 16:c2b0f3ca63dd | 155 | |
aktk | 16:c2b0f3ca63dd | 156 | inline unsigned short TRP105FS::getVoltage() |
aktk | 16:c2b0f3ca63dd | 157 | { |
aktk | 16:c2b0f3ca63dd | 158 | return _ai.read_u16(); |
aktk | 16:c2b0f3ca63dd | 159 | } |
aktk | 16:c2b0f3ca63dd | 160 | |
aktk | 0:e85788b14028 | 161 | #endif |