Library for US-015 (or HC-SR04) Ultrasonic Module Distance Measuring Sensors
US-015.cpp@0:7163b97ee5f1, 2016-01-13 (annotated)
- Committer:
- igbt6
- Date:
- Wed Jan 13 01:09:55 2016 +0000
- Revision:
- 0:7163b97ee5f1
Library finished
Who changed what in which revision?
User | Revision | Line number | New 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 |