GP2Y0A21YK0F IRsensor 用ライブラリ

Dependents:   IRsensor_sample 2019NHK_A_sensor 200_yotsuba_21

Committer:
skouki
Date:
Tue Jun 25 08:45:06 2019 +0000
Revision:
1:fe97d826508d
Parent:
0:d0a252247fec
Child:
2:35b3dd6f7f17
v1;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
skouki 0:d0a252247fec 1 #include "IRsensor.h"
skouki 0:d0a252247fec 2
skouki 0:d0a252247fec 3 IRsensor::IRsensor(PinName pin):a_in(pin)
skouki 0:d0a252247fec 4 {
skouki 0:d0a252247fec 5 }
skouki 0:d0a252247fec 6
skouki 0:d0a252247fec 7 float IRsensor::getInputvoltage(){
skouki 0:d0a252247fec 8 float voltage = a_in.read()*3.3;
skouki 0:d0a252247fec 9 return voltage;
skouki 0:d0a252247fec 10 }
skouki 0:d0a252247fec 11
skouki 0:d0a252247fec 12 float IRsensor::getDistance(int n){
skouki 0:d0a252247fec 13 float distance_sum=0;
skouki 0:d0a252247fec 14 for(int i=0;i<n;i++){
skouki 0:d0a252247fec 15 distance_sum += changeVtoD(getInputvoltage());
skouki 0:d0a252247fec 16 }
skouki 0:d0a252247fec 17 return distance_sum / n;
skouki 0:d0a252247fec 18 }
skouki 0:d0a252247fec 19
skouki 0:d0a252247fec 20 float IRsensor::changeVtoD(float voltage)
skouki 0:d0a252247fec 21 {
skouki 0:d0a252247fec 22 float distance;
skouki 1:fe97d826508d 23 if (voltage > 2.285f) {
skouki 1:fe97d826508d 24 distance = 0.0f;
skouki 1:fe97d826508d 25 } else if (voltage > 1.645f) {
skouki 1:fe97d826508d 26 distance = -7.8125f * voltage + 27.8515f;
skouki 1:fe97d826508d 27 } else if (voltage > 1.305f) {
skouki 1:fe97d826508d 28 distance = -14.7058f * voltage + 39.1911f;
skouki 1:fe97d826508d 29 } else if (voltage > 1.08f) {
skouki 1:fe97d826508d 30 distance = -22.222f * voltage + 49.0f;
skouki 1:fe97d826508d 31 } else if (voltage > 0.928f) {
skouki 1:fe97d826508d 32 distance = -32.89473f * voltage + 60.526f;
skouki 1:fe97d826508d 33 } else if (voltage > 0.835f) {
skouki 1:fe97d826508d 34 distance = -53.7634f * voltage + 79.89247f;
skouki 1:fe97d826508d 35 } else if (voltage > 0.737f) {
skouki 1:fe97d826508d 36 distance = -51.02040f * voltage + 77.60204f;
skouki 1:fe97d826508d 37 } else if (voltage > 0.673f) {
skouki 1:fe97d826508d 38 distance = -78.12500f * voltage + 97.57812f;
skouki 1:fe97d826508d 39 } else if (voltage > 0.608f) {
skouki 1:fe97d826508d 40 distance = -76.92307f * voltage + 96.76923f;
skouki 1:fe97d826508d 41 } else if (voltage > 0.562f) {
skouki 1:fe97d826508d 42 distance = -108.6956f * voltage + 116.0869f;
skouki 1:fe97d826508d 43 } else if (voltage > 0.515f) {
skouki 1:fe97d826508d 44 distance = -106.3829f * voltage + 114.7872f;
skouki 1:fe97d826508d 45 } else if (voltage > 0.474f) {
skouki 1:fe97d826508d 46 distance = -121.9512f * voltage + 122.8048f;
skouki 1:fe97d826508d 47 } else if (voltage > 0.447f) {
skouki 1:fe97d826508d 48 distance = -185.1851f * voltage + 152.7777f;
skouki 1:fe97d826508d 49 } else if (voltage > 0.432f) {
skouki 1:fe97d826508d 50 distance = -333.333f * voltage + 219.0f;
skouki 0:d0a252247fec 51 } else {
skouki 1:fe97d826508d 52 distance = 9999.9f;
skouki 0:d0a252247fec 53 }
skouki 0:d0a252247fec 54
skouki 0:d0a252247fec 55 return distance;
skouki 0:d0a252247fec 56 }