GP2Y0A21YK0F IRsensor 用ライブラリ

Dependents:   IRsensor_sample 2019NHK_A_sensor 200_yotsuba_21

Committer:
skouki
Date:
Mon Jun 24 07:29:14 2019 +0000
Revision:
0:d0a252247fec
Child:
1:fe97d826508d
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 0:d0a252247fec 23 if (voltage > 2.285) {
skouki 0:d0a252247fec 24 distance = 0;
skouki 0:d0a252247fec 25 } else if (voltage > 1.645) {
skouki 0:d0a252247fec 26 distance = -7.8125 * voltage + 27.8515625;
skouki 0:d0a252247fec 27 } else if (voltage > 1.305) {
skouki 0:d0a252247fec 28 distance = -14.7058823529412 * voltage + 39.1911764705882;
skouki 0:d0a252247fec 29 } else if (voltage > 1.08) {
skouki 0:d0a252247fec 30 distance = -22.2222222222222 * voltage + 49;
skouki 0:d0a252247fec 31 } else if (voltage > 0.928) {
skouki 0:d0a252247fec 32 distance = -32.8947368421053 * voltage + 60.5263157894737;
skouki 0:d0a252247fec 33 } else if (voltage > 0.835) {
skouki 0:d0a252247fec 34 distance = -53.763440860215 * voltage + 79.8924731182795;
skouki 0:d0a252247fec 35 } else if (voltage > 0.737) {
skouki 0:d0a252247fec 36 distance = -51.0204081632653 * voltage + 77.6020408163266;
skouki 0:d0a252247fec 37 } else if (voltage > 0.673) {
skouki 0:d0a252247fec 38 distance = -78.1250000000001 * voltage + 97.5781250000001;
skouki 0:d0a252247fec 39 } else if (voltage > 0.608) {
skouki 0:d0a252247fec 40 distance = -76.9230769230768 * voltage + 96.7692307692307;
skouki 0:d0a252247fec 41 } else if (voltage > 0.562) {
skouki 0:d0a252247fec 42 distance = -108.695652173913 * voltage + 116.086956521739;
skouki 0:d0a252247fec 43 } else if (voltage > 0.515) {
skouki 0:d0a252247fec 44 distance = -106.382978723404 * voltage + 114.787234042553;
skouki 0:d0a252247fec 45 } else if (voltage > 0.474) {
skouki 0:d0a252247fec 46 distance = -121.951219512195 * voltage + 122.80487804878;
skouki 0:d0a252247fec 47 } else if (voltage > 0.447) {
skouki 0:d0a252247fec 48 distance = -185.185185185185 * voltage + 152.777777777778;
skouki 0:d0a252247fec 49 } else if (voltage > 0.432) {
skouki 0:d0a252247fec 50 distance = -333.333333333333 * voltage + 219;
skouki 0:d0a252247fec 51 } else {
skouki 0:d0a252247fec 52 distance = 9999;
skouki 0:d0a252247fec 53 }
skouki 0:d0a252247fec 54
skouki 0:d0a252247fec 55 return distance;
skouki 0:d0a252247fec 56 }