for child
Fork of TRP105F_Spline by
TRP105F_Spline.h@13:16fc61b41eff, 2016-06-07 (annotated)
- Committer:
- aktk
- Date:
- Tue Jun 07 16:23:19 2016 +0000
- Revision:
- 13:16fc61b41eff
- Parent:
- 12:db5110d9d494
- Child:
- 14:a99bf22b919d
type of _Sample_Num was modified: int -> unsigned short.; in saveSetting(any), size of _Sample_num to write into savedata file was modified: int -> unsigned short.
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 | 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 | 3:b56e933bebc2 | 64 | unsigned short getDistance(); // get voltage from PinName and getX() |
aktk | 3:b56e933bebc2 | 65 | unsigned short getX(unsigned short); // the fuction to get distance. |
aktk | 3:b56e933bebc2 | 66 | unsigned short getY(unsigned short); |
aktk | 0:e85788b14028 | 67 | void calibrateSensor(); |
aktk | 3:b56e933bebc2 | 68 | //void calibrateSensor(VDset* arg_set, unsigned int arg_num); |
aktk | 3:b56e933bebc2 | 69 | void calibrate(); |
aktk | 3:b56e933bebc2 | 70 | void setSample(unsigned short,unsigned short); |
aktk | 0:e85788b14028 | 71 | void saveSetting(); |
aktk | 1:2053662b1167 | 72 | void saveSetting(const char *filename); |
aktk | 0:e85788b14028 | 73 | void loadSetting(); |
aktk | 1:2053662b1167 | 74 | void loadSetting(const char *filename); |
aktk | 12:db5110d9d494 | 75 | void loadSetting_fromSerial(Serial *com); |
aktk | 5:7d4fc0979976 | 76 | void printOutData(const char *filename); |
aktk | 11:d60fb729eacf | 77 | #ifdef HAS_COM_TO_CONSOLE |
aktk | 0:e85788b14028 | 78 | void printThresholds(); |
aktk | 11:d60fb729eacf | 79 | #endif |
aktk | 0:e85788b14028 | 80 | |
aktk | 0:e85788b14028 | 81 | private: |
aktk | 1:2053662b1167 | 82 | // |
aktk | 1:2053662b1167 | 83 | // Defining Constants |
aktk | 1:2053662b1167 | 84 | // |
aktk | 13:16fc61b41eff | 85 | enum { |
aktk | 0:e85788b14028 | 86 | _LIDX = 0, |
aktk | 1:2053662b1167 | 87 | _RIDX = 255, |
aktk | 0:e85788b14028 | 88 | _ENUM = _RIDX - _LIDX + 1 |
aktk | 0:e85788b14028 | 89 | }; |
aktk | 1:2053662b1167 | 90 | // |
aktk | 1:2053662b1167 | 91 | // Variables |
aktk | 1:2053662b1167 | 92 | // |
aktk | 9:ec1ee4a6b6a4 | 93 | // Debug or Module |
aktk | 3:b56e933bebc2 | 94 | UseType _useType; |
aktk | 9:ec1ee4a6b6a4 | 95 | // For data sampling and making spline model |
aktk | 13:16fc61b41eff | 96 | unsigned short _Sample_Num; // the number of samples for derive spline |
aktk | 3:b56e933bebc2 | 97 | VDset* _Sample_Set; |
aktk | 9:ec1ee4a6b6a4 | 98 | double* _u_spline; |
aktk | 9:ec1ee4a6b6a4 | 99 | // For comvert voltage -> physical quantity e.g. distance |
aktk | 3:b56e933bebc2 | 100 | VDset _Set[_ENUM]; |
aktk | 3:b56e933bebc2 | 101 | unsigned short _Threshold[_ENUM]; //_Threshold[18] is not used virtually. |
aktk | 9:ec1ee4a6b6a4 | 102 | // For get voltage |
aktk | 9:ec1ee4a6b6a4 | 103 | AnalogIn _ai; |
aktk | 3:b56e933bebc2 | 104 | // |
aktk | 0:e85788b14028 | 105 | // |
aktk | 0:e85788b14028 | 106 | // For calibration |
aktk | 0:e85788b14028 | 107 | // |
aktk | 11:d60fb729eacf | 108 | #ifdef HAS_COM_TO_CONSOLE |
aktk | 0:e85788b14028 | 109 | void _sampleData(); |
aktk | 11:d60fb729eacf | 110 | #endif |
aktk | 3:b56e933bebc2 | 111 | void _setSample(unsigned short,unsigned short); |
aktk | 3:b56e933bebc2 | 112 | void _setSamples(VDset* arg_set, unsigned int arg_num); |
aktk | 3:b56e933bebc2 | 113 | unsigned short _getSplineYof(double arg_x); |
aktk | 0:e85788b14028 | 114 | void _makeSpline(); // Cubic spline |
aktk | 0:e85788b14028 | 115 | // |
aktk | 0:e85788b14028 | 116 | // For get distance |
aktk | 0:e85788b14028 | 117 | // |
aktk | 0:e85788b14028 | 118 | int _getNearest(int, int, unsigned short); |
aktk | 0:e85788b14028 | 119 | // |
aktk | 1:2053662b1167 | 120 | // For debug |
aktk | 1:2053662b1167 | 121 | // |
aktk | 0:e85788b14028 | 122 | void _printOutData(unsigned short *arg, int num, char* name); |
aktk | 0:e85788b14028 | 123 | void _printOutData(VDset *arg, int num, char* name); |
aktk | 0:e85788b14028 | 124 | void _printOutData(double *arg, int num, char* name); |
aktk | 0:e85788b14028 | 125 | }; |
aktk | 0:e85788b14028 | 126 | #endif |