no thread

Dependents:   200_yotuba_21_uiChange

Committer:
skouki
Date:
Thu Aug 29 02:20:25 2019 +0000
Revision:
4:004bdb88ab3e
Parent:
3:26e2cfa5a983
updata_Doxygen

Who changed what in which revision?

UserRevisionLine numberNew contents of line
skouki 0:d0a252247fec 1 #include "IRsensor.h"
skouki 0:d0a252247fec 2
skouki 2:35b3dd6f7f17 3 IRsensor::IRsensor(PinName pin):
skouki 2:35b3dd6f7f17 4 a_in(pin)
skouki 0:d0a252247fec 5 {
skouki 2:35b3dd6f7f17 6 thread_get_distance.start(callback(this, &IRsensor::threadloop_get_distance));
skouki 0:d0a252247fec 7 }
skouki 0:d0a252247fec 8
skouki 2:35b3dd6f7f17 9 void IRsensor::threadloop_get_distance()
skouki 2:35b3dd6f7f17 10 {
skouki 2:35b3dd6f7f17 11 while(true){
skouki 2:35b3dd6f7f17 12 compute_distance();
skouki 2:35b3dd6f7f17 13 }
skouki 0:d0a252247fec 14 }
skouki 0:d0a252247fec 15
skouki 2:35b3dd6f7f17 16 void IRsensor::compute_distance(){
skouki 2:35b3dd6f7f17 17 getInputvoltage();
skouki 2:35b3dd6f7f17 18 changeVtoD();
skouki 2:35b3dd6f7f17 19 }
skouki 2:35b3dd6f7f17 20
skouki 2:35b3dd6f7f17 21 void IRsensor::getInputvoltage(){
skouki 2:35b3dd6f7f17 22 voltage = a_in.read()*3.3f;
skouki 0:d0a252247fec 23 }
skouki 0:d0a252247fec 24
skouki 2:35b3dd6f7f17 25 void IRsensor::changeVtoD()
skouki 0:d0a252247fec 26 {
skouki 1:fe97d826508d 27 if (voltage > 2.285f) {
skouki 2:35b3dd6f7f17 28 originaldistance = 0.0f;
skouki 1:fe97d826508d 29 } else if (voltage > 1.645f) {
skouki 2:35b3dd6f7f17 30 originaldistance = -7.8125f * voltage + 27.8515f;
skouki 1:fe97d826508d 31 } else if (voltage > 1.305f) {
skouki 2:35b3dd6f7f17 32 originaldistance = -14.7058f * voltage + 39.1911f;
skouki 1:fe97d826508d 33 } else if (voltage > 1.08f) {
skouki 2:35b3dd6f7f17 34 originaldistance = -22.222f * voltage + 49.0f;
skouki 1:fe97d826508d 35 } else if (voltage > 0.928f) {
skouki 2:35b3dd6f7f17 36 originaldistance = -32.89473f * voltage + 60.526f;
skouki 1:fe97d826508d 37 } else if (voltage > 0.835f) {
skouki 2:35b3dd6f7f17 38 originaldistance = -53.7634f * voltage + 79.89247f;
skouki 1:fe97d826508d 39 } else if (voltage > 0.737f) {
skouki 2:35b3dd6f7f17 40 originaldistance = -51.02040f * voltage + 77.60204f;
skouki 1:fe97d826508d 41 } else if (voltage > 0.673f) {
skouki 2:35b3dd6f7f17 42 originaldistance = -78.12500f * voltage + 97.57812f;
skouki 1:fe97d826508d 43 } else if (voltage > 0.608f) {
skouki 2:35b3dd6f7f17 44 originaldistance = -76.92307f * voltage + 96.76923f;
skouki 1:fe97d826508d 45 } else if (voltage > 0.562f) {
skouki 2:35b3dd6f7f17 46 originaldistance = -108.6956f * voltage + 116.0869f;
skouki 1:fe97d826508d 47 } else if (voltage > 0.515f) {
skouki 2:35b3dd6f7f17 48 originaldistance = -106.3829f * voltage + 114.7872f;
skouki 1:fe97d826508d 49 } else if (voltage > 0.474f) {
skouki 2:35b3dd6f7f17 50 originaldistance = -121.9512f * voltage + 122.8048f;
skouki 1:fe97d826508d 51 } else if (voltage > 0.447f) {
skouki 2:35b3dd6f7f17 52 originaldistance = -185.1851f * voltage + 152.7777f;
skouki 1:fe97d826508d 53 } else if (voltage > 0.432f) {
skouki 2:35b3dd6f7f17 54 originaldistance = -333.333f * voltage + 219.0f;
skouki 0:d0a252247fec 55 } else {
skouki 2:35b3dd6f7f17 56 originaldistance = 9999.9f;
skouki 0:d0a252247fec 57 }
skouki 2:35b3dd6f7f17 58 }
skouki 2:35b3dd6f7f17 59
skouki 2:35b3dd6f7f17 60 void IRsensor::startAveraging(uint8_t averaging_range)
skouki 2:35b3dd6f7f17 61 {
skouki 2:35b3dd6f7f17 62 bufferSize = averaging_range;
skouki 3:26e2cfa5a983 63 data = new float[bufferSize];
skouki 2:35b3dd6f7f17 64 thread_averaging_distance.start(callback(this, &IRsensor::threadloop_averaging_distance));
skouki 2:35b3dd6f7f17 65 }
skouki 2:35b3dd6f7f17 66 void IRsensor::threadloop_averaging_distance()
skouki 2:35b3dd6f7f17 67 {
skouki 2:35b3dd6f7f17 68 while(true){
skouki 2:35b3dd6f7f17 69 computeaverage();
skouki 2:35b3dd6f7f17 70 }
skouki 0:d0a252247fec 71 }
skouki 2:35b3dd6f7f17 72 void IRsensor::computeaverage()
skouki 2:35b3dd6f7f17 73 {
skouki 2:35b3dd6f7f17 74 bufferpoint++;
skouki 2:35b3dd6f7f17 75 data[bufferpoint % bufferSize] = originaldistance;
skouki 2:35b3dd6f7f17 76 distance_sum = 0;
skouki 2:35b3dd6f7f17 77 for(int i = 0;i<bufferSize;i++)
skouki 2:35b3dd6f7f17 78 distance_sum += data[i];
skouki 2:35b3dd6f7f17 79 distance_average = distance_sum / bufferSize;
skouki 2:35b3dd6f7f17 80 }
skouki 2:35b3dd6f7f17 81 float IRsensor::getDistance()
skouki 2:35b3dd6f7f17 82 {
skouki 2:35b3dd6f7f17 83 return originaldistance;
skouki 2:35b3dd6f7f17 84 }
skouki 2:35b3dd6f7f17 85 float IRsensor::get_Averagingdistance()
skouki 2:35b3dd6f7f17 86 {
skouki 2:35b3dd6f7f17 87 return distance_average;
skouki 2:35b3dd6f7f17 88 }
skouki 4:004bdb88ab3e 89
skouki 4:004bdb88ab3e 90 float IRsensor::getVoltage()
skouki 4:004bdb88ab3e 91 {
skouki 4:004bdb88ab3e 92 return voltage;
skouki 4:004bdb88ab3e 93 }