GP2Y0A21YK0F IRsensor 用ライブラリ

Dependents:   IRsensor_sample 2019NHK_A_sensor 200_yotsuba_21

IRsensor.cpp

Committer:
skouki
Date:
2019-06-24
Revision:
0:d0a252247fec
Child:
1:fe97d826508d

File content as of revision 0:d0a252247fec:

#include "IRsensor.h"

IRsensor::IRsensor(PinName pin):a_in(pin)
{
}

float IRsensor::getInputvoltage(){
    float voltage = a_in.read()*3.3;
    return voltage;
}

float IRsensor::getDistance(int n){
    float distance_sum=0;
    for(int i=0;i<n;i++){
        distance_sum += changeVtoD(getInputvoltage());
    }  
    return distance_sum / n;    
}

float IRsensor::changeVtoD(float voltage)
{
    float distance;
    if (voltage > 2.285) {
        distance = 0;
    } else if (voltage > 1.645) {
        distance = -7.8125 * voltage + 27.8515625;
    } else if (voltage > 1.305) {
        distance = -14.7058823529412 * voltage + 39.1911764705882;
    } else if (voltage > 1.08) {
        distance = -22.2222222222222 * voltage + 49;
    } else if (voltage > 0.928) {
        distance = -32.8947368421053 * voltage + 60.5263157894737;
    } else if (voltage > 0.835) {
        distance = -53.763440860215 * voltage + 79.8924731182795;
    } else if (voltage > 0.737) {
        distance = -51.0204081632653 * voltage + 77.6020408163266;
    } else if (voltage > 0.673) {
        distance = -78.1250000000001 * voltage + 97.5781250000001;
    } else if (voltage > 0.608) {
        distance = -76.9230769230768 * voltage + 96.7692307692307;
    } else if (voltage > 0.562) {
        distance = -108.695652173913 * voltage + 116.086956521739;
    } else if (voltage > 0.515) {
        distance = -106.382978723404 * voltage + 114.787234042553;
    } else if (voltage > 0.474) {
        distance = -121.951219512195 * voltage + 122.80487804878;
    } else if (voltage > 0.447) {
        distance = -185.185185185185 * voltage + 152.777777777778;
    } else if (voltage > 0.432) {
        distance = -333.333333333333 * voltage + 219;
    } else {
        distance = 9999;
    }
 
    return distance;
}