GP2Y0A21YK0F IRsensor 用ライブラリ
Dependents: NHK2019_mae_v6 NHK2019_main_v6 NHK2019_usiro_v6 NHK2019_mae_v6 ... more
IRsensor.cpp@0:d0a252247fec, 2019-06-24 (annotated)
- Committer:
- skouki
- Date:
- Mon Jun 24 07:29:14 2019 +0000
- Revision:
- 0:d0a252247fec
- Child:
- 1:fe97d826508d
v1
Who changed what in which revision?
User | Revision | Line number | New 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 | } |