Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
ultrasonic.cpp@5:cc084768bab9, 2019-02-16 (annotated)
- Committer:
- khuifang2202
- Date:
- Sat Feb 16 18:20:09 2019 +0000
- Revision:
- 5:cc084768bab9
- Parent:
- 4:e0f9c9fb4cf3
huifang;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ejteb | 0:6aa04a8c8d4c | 1 | #include "ultrasonic.h" |
ejteb | 0:6aa04a8c8d4c | 2 | |
ejteb | 0:6aa04a8c8d4c | 3 | ultrasonic::ultrasonic(PinName trigPin, PinName echoPin, float updateSpeed, float timeout):_trig(trigPin), _echo(echoPin) |
ejteb | 0:6aa04a8c8d4c | 4 | { |
ejteb | 0:6aa04a8c8d4c | 5 | _updateSpeed = updateSpeed; |
ejteb | 0:6aa04a8c8d4c | 6 | _timeout = timeout; |
ejteb | 0:6aa04a8c8d4c | 7 | } |
ejteb | 0:6aa04a8c8d4c | 8 | |
ejteb | 2:cc1143d36567 | 9 | ultrasonic::ultrasonic(PinName trigPin, PinName echoPin, float updateSpeed, float timeout, void onUpdate(int)) |
ejteb | 0:6aa04a8c8d4c | 10 | :_trig(trigPin), _echo(echoPin) |
ejteb | 0:6aa04a8c8d4c | 11 | { |
ejteb | 0:6aa04a8c8d4c | 12 | _onUpdateMethod=onUpdate; |
ejteb | 0:6aa04a8c8d4c | 13 | _updateSpeed = updateSpeed; |
ejteb | 0:6aa04a8c8d4c | 14 | _timeout = timeout; |
ejteb | 0:6aa04a8c8d4c | 15 | _t.start (); |
ejteb | 0:6aa04a8c8d4c | 16 | } |
ejteb | 2:cc1143d36567 | 17 | void ultrasonic::_startT() |
ejteb | 2:cc1143d36567 | 18 | { |
ejteb | 2:cc1143d36567 | 19 | if(_t.read()>600) |
ejteb | 2:cc1143d36567 | 20 | { |
ejteb | 2:cc1143d36567 | 21 | _t.reset (); |
ejteb | 2:cc1143d36567 | 22 | } |
ejteb | 0:6aa04a8c8d4c | 23 | start = _t.read_us (); |
ejteb | 0:6aa04a8c8d4c | 24 | } |
ejteb | 0:6aa04a8c8d4c | 25 | |
ejteb | 0:6aa04a8c8d4c | 26 | void ultrasonic::_updateDist() |
ejteb | 0:6aa04a8c8d4c | 27 | { |
khuifang2202 | 5:cc084768bab9 | 28 | //int x=0; |
ejteb | 0:6aa04a8c8d4c | 29 | end = _t.read_us (); |
ejteb | 0:6aa04a8c8d4c | 30 | done = 1; |
khuifang2202 | 5:cc084768bab9 | 31 | _distance = (end - start)/305; |
khuifang2202 | 5:cc084768bab9 | 32 | //_distance = (end-start); |
khuifang2202 | 5:cc084768bab9 | 33 | //_distance = ((_distance)<<2+_distance)/29; // (distance*5)/29 is distance/5.8 |
khuifang2202 | 5:cc084768bab9 | 34 | //x = (end-start); |
khuifang2202 | 5:cc084768bab9 | 35 | //_distance = (x<<2+x)/29; //(distance*5)/29 is distance/5.8 |
khuifang2202 | 5:cc084768bab9 | 36 | //x = (end - start); |
khuifang2202 | 5:cc084768bab9 | 37 | //_distance = (x<<2+x)/29; |
khuifang2202 | 5:cc084768bab9 | 38 | //_distance = ((_distance)<<2+_distance)/29; |
ejteb | 0:6aa04a8c8d4c | 39 | _tout.detach(); |
ejteb | 2:cc1143d36567 | 40 | _tout.attach(this,&ultrasonic::_startTrig, _updateSpeed); |
ejteb | 0:6aa04a8c8d4c | 41 | } |
ejteb | 0:6aa04a8c8d4c | 42 | void ultrasonic::_startTrig(void) |
ejteb | 0:6aa04a8c8d4c | 43 | { |
ejteb | 0:6aa04a8c8d4c | 44 | _tout.detach(); |
ejteb | 0:6aa04a8c8d4c | 45 | _trig=1; |
ejteb | 0:6aa04a8c8d4c | 46 | wait_us(10); |
ejteb | 0:6aa04a8c8d4c | 47 | done = 0; |
ejteb | 0:6aa04a8c8d4c | 48 | _echo.rise(this,&ultrasonic::_startT); |
ejteb | 0:6aa04a8c8d4c | 49 | _echo.fall(this,&ultrasonic::_updateDist); |
ejteb | 0:6aa04a8c8d4c | 50 | _echo.enable_irq (); |
ejteb | 0:6aa04a8c8d4c | 51 | _tout.attach(this,&ultrasonic::_startTrig,_timeout); |
ejteb | 2:cc1143d36567 | 52 | _trig=0; |
ejteb | 0:6aa04a8c8d4c | 53 | } |
ejteb | 0:6aa04a8c8d4c | 54 | |
ejteb | 0:6aa04a8c8d4c | 55 | int ultrasonic::getCurrentDistance(void) |
ejteb | 0:6aa04a8c8d4c | 56 | { |
ejteb | 0:6aa04a8c8d4c | 57 | return _distance; |
ejteb | 0:6aa04a8c8d4c | 58 | } |
ejteb | 0:6aa04a8c8d4c | 59 | void ultrasonic::pauseUpdates(void) |
ejteb | 0:6aa04a8c8d4c | 60 | { |
ejteb | 0:6aa04a8c8d4c | 61 | _tout.detach(); |
ejteb | 0:6aa04a8c8d4c | 62 | _echo.rise(NULL); |
ejteb | 0:6aa04a8c8d4c | 63 | _echo.fall(NULL); |
ejteb | 0:6aa04a8c8d4c | 64 | } |
ejteb | 0:6aa04a8c8d4c | 65 | void ultrasonic::startUpdates(void) |
ejteb | 0:6aa04a8c8d4c | 66 | { |
ejteb | 0:6aa04a8c8d4c | 67 | _startTrig(); |
ejteb | 0:6aa04a8c8d4c | 68 | } |
ejteb | 0:6aa04a8c8d4c | 69 | void ultrasonic::attachOnUpdate(void method(int)) |
ejteb | 0:6aa04a8c8d4c | 70 | { |
ejteb | 0:6aa04a8c8d4c | 71 | _onUpdateMethod = method; |
ejteb | 0:6aa04a8c8d4c | 72 | } |
ejteb | 0:6aa04a8c8d4c | 73 | void ultrasonic::changeUpdateSpeed(float updateSpeed) |
ejteb | 0:6aa04a8c8d4c | 74 | { |
ejteb | 0:6aa04a8c8d4c | 75 | _updateSpeed = updateSpeed; |
ejteb | 0:6aa04a8c8d4c | 76 | } |
ejteb | 0:6aa04a8c8d4c | 77 | float ultrasonic::getUpdateSpeed() |
ejteb | 0:6aa04a8c8d4c | 78 | { |
ejteb | 0:6aa04a8c8d4c | 79 | return _updateSpeed; |
ejteb | 0:6aa04a8c8d4c | 80 | } |
ejteb | 0:6aa04a8c8d4c | 81 | int ultrasonic::isUpdated(void) |
ejteb | 0:6aa04a8c8d4c | 82 | { |
ejteb | 4:e0f9c9fb4cf3 | 83 | //printf("%d", done); |
ejteb | 0:6aa04a8c8d4c | 84 | d=done; |
ejteb | 0:6aa04a8c8d4c | 85 | done = 0; |
ejteb | 0:6aa04a8c8d4c | 86 | return d; |
ejteb | 0:6aa04a8c8d4c | 87 | } |
ejteb | 2:cc1143d36567 | 88 | void ultrasonic::checkDistance(void) |
ejteb | 2:cc1143d36567 | 89 | { |
ejteb | 2:cc1143d36567 | 90 | if(isUpdated()) |
ejteb | 2:cc1143d36567 | 91 | { |
ejteb | 2:cc1143d36567 | 92 | (*_onUpdateMethod)(_distance); |
ejteb | 2:cc1143d36567 | 93 | } |
ejteb | 2:cc1143d36567 | 94 | } |