Library for US-015 (or HC-SR04) Ultrasonic Module Distance Measuring Sensors

Committer:
igbt6
Date:
Wed Jan 13 01:09:55 2016 +0000
Revision:
0:7163b97ee5f1
Library finished

Who changed what in which revision?

UserRevisionLine numberNew contents of line
igbt6 0:7163b97ee5f1 1 #include "US-015.h"
igbt6 0:7163b97ee5f1 2
igbt6 0:7163b97ee5f1 3
igbt6 0:7163b97ee5f1 4
igbt6 0:7163b97ee5f1 5 US015::US015(PinName triggerPin, PinName echoPin, uint32_t timeout):trigger(triggerPin),echoIn(echoPin),timeoutValue(timeout)
igbt6 0:7163b97ee5f1 6 {
igbt6 0:7163b97ee5f1 7 echoIn.rise(this, &US015::startMeasureCallback);
igbt6 0:7163b97ee5f1 8 echoIn.fall(this, &US015::stopMeasureCallback);
igbt6 0:7163b97ee5f1 9 timerCtrl = new TimeController();
igbt6 0:7163b97ee5f1 10 measurementRunning=false;
igbt6 0:7163b97ee5f1 11 measuremntFinishedCallback= NULL;
igbt6 0:7163b97ee5f1 12 }
igbt6 0:7163b97ee5f1 13
igbt6 0:7163b97ee5f1 14 int US015::convertMaxDistanceToMaxTimeout(int maxDistHandledBySensorInCm){
igbt6 0:7163b97ee5f1 15 return (maxDistHandledBySensorInCm) / (float)((SPEED_OF_SOUND)/10000)/2;
igbt6 0:7163b97ee5f1 16 }
igbt6 0:7163b97ee5f1 17
igbt6 0:7163b97ee5f1 18 void US015::setFinishCallback(void (*finishCallback)(int resultValue))
igbt6 0:7163b97ee5f1 19 {
igbt6 0:7163b97ee5f1 20 measuremntFinishedCallback= finishCallback;
igbt6 0:7163b97ee5f1 21 }
igbt6 0:7163b97ee5f1 22
igbt6 0:7163b97ee5f1 23 bool US015::doMeasurement(void)
igbt6 0:7163b97ee5f1 24 {
igbt6 0:7163b97ee5f1 25 if(isMeasurementRuning())
igbt6 0:7163b97ee5f1 26 return false;
igbt6 0:7163b97ee5f1 27 timerCtrl->startTime=0;
igbt6 0:7163b97ee5f1 28 trigger.write(1); //triggerPin
igbt6 0:7163b97ee5f1 29 wait_us(30);
igbt6 0:7163b97ee5f1 30 trigger.write(0);
igbt6 0:7163b97ee5f1 31 measurementRunning=true;
igbt6 0:7163b97ee5f1 32 return true;
igbt6 0:7163b97ee5f1 33 }
igbt6 0:7163b97ee5f1 34
igbt6 0:7163b97ee5f1 35 bool US015::isMeasurementRuning()
igbt6 0:7163b97ee5f1 36 {
igbt6 0:7163b97ee5f1 37 return measurementRunning;
igbt6 0:7163b97ee5f1 38 }
igbt6 0:7163b97ee5f1 39
igbt6 0:7163b97ee5f1 40 int US015::convertTimeToDistanceValue_mm(int timeUs)
igbt6 0:7163b97ee5f1 41 {
igbt6 0:7163b97ee5f1 42 return ((timeUs) * (float)((SPEED_OF_SOUND)/1000))/2; //(0.343mm/us)
igbt6 0:7163b97ee5f1 43 }
igbt6 0:7163b97ee5f1 44
igbt6 0:7163b97ee5f1 45 int US015::convertTimeToDistanceValue_cm(int timeUs)
igbt6 0:7163b97ee5f1 46 {
igbt6 0:7163b97ee5f1 47 return ((timeUs) *(float)((SPEED_OF_SOUND)/10000))/2; //(0.034cm/us)
igbt6 0:7163b97ee5f1 48 }
igbt6 0:7163b97ee5f1 49
igbt6 0:7163b97ee5f1 50 int US015::getTimePassedValue(void)
igbt6 0:7163b97ee5f1 51 {
igbt6 0:7163b97ee5f1 52 return timerCtrl->timer.read_us()-timerCtrl->startTime;
igbt6 0:7163b97ee5f1 53 }
igbt6 0:7163b97ee5f1 54
igbt6 0:7163b97ee5f1 55 int US015::getTimeoutValue(void)
igbt6 0:7163b97ee5f1 56 {
igbt6 0:7163b97ee5f1 57 return timeoutValue;
igbt6 0:7163b97ee5f1 58 }
igbt6 0:7163b97ee5f1 59
igbt6 0:7163b97ee5f1 60 void US015::resetMeasuremnt(void)
igbt6 0:7163b97ee5f1 61 {
igbt6 0:7163b97ee5f1 62 timerCtrl->timer.reset();
igbt6 0:7163b97ee5f1 63 measurementRunning=false;
igbt6 0:7163b97ee5f1 64 }
igbt6 0:7163b97ee5f1 65
igbt6 0:7163b97ee5f1 66 //private methods
igbt6 0:7163b97ee5f1 67 void US015::startMeasureCallback(void)
igbt6 0:7163b97ee5f1 68 {
igbt6 0:7163b97ee5f1 69 timerCtrl->timer.start();
igbt6 0:7163b97ee5f1 70 timerCtrl->startTime= timerCtrl->timer.read_us();
igbt6 0:7163b97ee5f1 71 }
igbt6 0:7163b97ee5f1 72
igbt6 0:7163b97ee5f1 73 void US015::stopMeasureCallback(void)
igbt6 0:7163b97ee5f1 74 {
igbt6 0:7163b97ee5f1 75 timerCtrl->difTime= timerCtrl->timer.read_us()-timerCtrl->startTime;
igbt6 0:7163b97ee5f1 76 resetMeasuremnt();
igbt6 0:7163b97ee5f1 77 if(measuremntFinishedCallback!=NULL)
igbt6 0:7163b97ee5f1 78 {
igbt6 0:7163b97ee5f1 79 (*measuremntFinishedCallback)(convertTimeToDistanceValue_mm(timerCtrl->difTime)); //for default
igbt6 0:7163b97ee5f1 80 }
igbt6 0:7163b97ee5f1 81 }
igbt6 0:7163b97ee5f1 82