GP2Y0A21YK0F IRsensor 用ライブラリ

Dependents:   NHK2019_mae_v6 NHK2019_main_v6 NHK2019_usiro_v6 NHK2019_mae_v6 ... more

Committer:
skouki
Date:
Wed Sep 11 01:59:10 2019 +0000
Revision:
7:790cd18896a8
Parent:
6:4d4e1ea317f5
change how to averaging

Who changed what in which revision?

UserRevisionLine numberNew contents of line
skouki 5:022e7ea6eea9 1 #ifndef IRSENSOR_H
skouki 5:022e7ea6eea9 2 #define IRSENSOR_H
skouki 5:022e7ea6eea9 3
skouki 5:022e7ea6eea9 4 #include"mbed.h"
skouki 5:022e7ea6eea9 5
skouki 4:004bdb88ab3e 6 /**
skouki 4:004bdb88ab3e 7 * @file IRsensor.h
skouki 6:4d4e1ea317f5 8 * @brief GP2Y0A21YK0F(SHARP 2Y0A21)を使ったIR距離測定
skouki 4:004bdb88ab3e 9 *
skouki 4:004bdb88ab3e 10 * Example :
skouki 4:004bdb88ab3e 11 * @code
skouki 4:004bdb88ab3e 12 * #include"mbed.h"
skouki 4:004bdb88ab3e 13 * #include"IRsensor.h"
skouki 4:004bdb88ab3e 14 *
skouki 4:004bdb88ab3e 15 * IRsensor ir1(PC_1);
skouki 4:004bdb88ab3e 16 *
skouki 4:004bdb88ab3e 17 * Serial pc(USBTX,USBRX,115200);
skouki 4:004bdb88ab3e 18 *
skouki 4:004bdb88ab3e 19 * int main()
skouki 4:004bdb88ab3e 20 * {
skouki 4:004bdb88ab3e 21 * ir1.startAveraging(255);
skouki 4:004bdb88ab3e 22 * while(1){
skouki 4:004bdb88ab3e 23 * float dis = ir1.getDistance();
skouki 4:004bdb88ab3e 24 * float ave_dis = ir1.get_Averagingdistance();
skouki 4:004bdb88ab3e 25 * pc.printf("dis:%4.4f[cm]||ave_dis:%4.4f[cm]\n\r",dis,ave_dis);
skouki 4:004bdb88ab3e 26 *
skouki 4:004bdb88ab3e 27 * }
skouki 4:004bdb88ab3e 28 * }
skouki 4:004bdb88ab3e 29 * @endcode
skouki 4:004bdb88ab3e 30 */
skouki 0:d0a252247fec 31
skouki 4:004bdb88ab3e 32 /**
skouki 4:004bdb88ab3e 33 * @brief SHARP 2Y0A21を使ったIR距離測定のクラス
skouki 4:004bdb88ab3e 34 */
skouki 0:d0a252247fec 35 class IRsensor{
skouki 0:d0a252247fec 36 public:
skouki 4:004bdb88ab3e 37 /**
skouki 4:004bdb88ab3e 38 * @brief コンストラクタ
skouki 4:004bdb88ab3e 39 * @param pin Pint that can do analogin
skouki 4:004bdb88ab3e 40 */
skouki 0:d0a252247fec 41 IRsensor(PinName pin);
skouki 4:004bdb88ab3e 42
skouki 4:004bdb88ab3e 43 /**
skouki 4:004bdb88ab3e 44 * @brief センサの値を取得
skouki 4:004bdb88ab3e 45 * @return voltage
skouki 4:004bdb88ab3e 46 */
skouki 4:004bdb88ab3e 47 float getVoltage();
skouki 4:004bdb88ab3e 48
skouki 4:004bdb88ab3e 49 /**
skouki 4:004bdb88ab3e 50 * @brief センサの値を距離変換し取得
skouki 4:004bdb88ab3e 51 * @return originaldistance
skouki 4:004bdb88ab3e 52 */
skouki 2:35b3dd6f7f17 53 float getDistance();
skouki 4:004bdb88ab3e 54
skouki 4:004bdb88ab3e 55 /**
skouki 4:004bdb88ab3e 56 * @brief 距離の平均化設定
skouki 4:004bdb88ab3e 57 * @param averaging_range averaging range 1~255
skouki 4:004bdb88ab3e 58 */
skouki 4:004bdb88ab3e 59 void startAveraging(uint8_t averaging_range);
skouki 4:004bdb88ab3e 60
skouki 4:004bdb88ab3e 61 /**
skouki 4:004bdb88ab3e 62 * @brief 平均化した距離を取得
skouki 4:004bdb88ab3e 63 * @return distance_average
skouki 4:004bdb88ab3e 64 */
skouki 2:35b3dd6f7f17 65 float get_Averagingdistance();
skouki 0:d0a252247fec 66
skouki 0:d0a252247fec 67 private:
skouki 2:35b3dd6f7f17 68 void threadloop_get_distance();
skouki 2:35b3dd6f7f17 69 void threadloop_averaging_distance();
skouki 2:35b3dd6f7f17 70 void compute_distance();
skouki 2:35b3dd6f7f17 71 void getInputvoltage();
skouki 7:790cd18896a8 72 float changeVtoD(float voltage_);
skouki 2:35b3dd6f7f17 73 void computeaverage();
skouki 2:35b3dd6f7f17 74
skouki 2:35b3dd6f7f17 75 float voltage;
skouki 2:35b3dd6f7f17 76 float originaldistance;
skouki 2:35b3dd6f7f17 77 float* data;
skouki 7:790cd18896a8 78 float voltage_sum;
skouki 2:35b3dd6f7f17 79 float distance_sum;
skouki 7:790cd18896a8 80 float voltage_average;
skouki 2:35b3dd6f7f17 81 float distance_average;
skouki 2:35b3dd6f7f17 82 uint8_t bufferSize;
skouki 2:35b3dd6f7f17 83 uint8_t bufferpoint;
skouki 2:35b3dd6f7f17 84 Thread thread_get_distance;
skouki 2:35b3dd6f7f17 85 Thread thread_averaging_distance;
skouki 0:d0a252247fec 86 AnalogIn a_in;
skouki 2:35b3dd6f7f17 87
skouki 0:d0a252247fec 88 };
skouki 0:d0a252247fec 89
skouki 0:d0a252247fec 90 #endif