Works with interrupts
Dependents: Nucleo_UltrasonicHelloWorld Proj Nucleo_UltrasonicHelloWorld mbedTurtleCar ... more
ultrasonic.cpp@0:6aa04a8c8d4c, 2014-11-23 (annotated)
- Committer:
- ejteb
- Date:
- Sun Nov 23 20:27:09 2014 +0000
- Revision:
- 0:6aa04a8c8d4c
- Child:
- 2:cc1143d36567
Seems to work :)
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 | printf("ultrasonic (wo methods)\r\n"); |
ejteb | 0:6aa04a8c8d4c | 6 | _updateSpeed = updateSpeed; |
ejteb | 0:6aa04a8c8d4c | 7 | _timeout = timeout; |
ejteb | 0:6aa04a8c8d4c | 8 | } |
ejteb | 0:6aa04a8c8d4c | 9 | |
ejteb | 0:6aa04a8c8d4c | 10 | ultrasonic::ultrasonic(PinName trigPin, PinName echoPin, float updateSpeed, float timeout, void onUpdate(int), void onTrig(void),void onStartTimer(void)/*, Timer *t*/ ) |
ejteb | 0:6aa04a8c8d4c | 11 | :_trig(trigPin), _echo(echoPin) |
ejteb | 0:6aa04a8c8d4c | 12 | { |
ejteb | 0:6aa04a8c8d4c | 13 | printf("ultrasonic(with methods)\r\n"); |
ejteb | 0:6aa04a8c8d4c | 14 | _onUpdateMethod=onUpdate; |
ejteb | 0:6aa04a8c8d4c | 15 | _onTriggerMethod=onTrig; |
ejteb | 0:6aa04a8c8d4c | 16 | _onStartTimerMethod=onStartTimer; |
ejteb | 0:6aa04a8c8d4c | 17 | _updateSpeed = updateSpeed; |
ejteb | 0:6aa04a8c8d4c | 18 | _timeout = timeout; |
ejteb | 0:6aa04a8c8d4c | 19 | _t.start (); |
ejteb | 0:6aa04a8c8d4c | 20 | //_ticker.attach_us(this,&ultrasonic::ticktock, 10); |
ejteb | 0:6aa04a8c8d4c | 21 | //_t = t; |
ejteb | 0:6aa04a8c8d4c | 22 | } |
ejteb | 0:6aa04a8c8d4c | 23 | void ultrasonic::_startT(){ |
ejteb | 0:6aa04a8c8d4c | 24 | //_t.reset (); |
ejteb | 0:6aa04a8c8d4c | 25 | start = _t.read_us (); |
ejteb | 0:6aa04a8c8d4c | 26 | // _t.start(); |
ejteb | 0:6aa04a8c8d4c | 27 | (*_onStartTimerMethod)(); |
ejteb | 0:6aa04a8c8d4c | 28 | // printf("_startT %d\r\n", tickcount); |
ejteb | 0:6aa04a8c8d4c | 29 | |
ejteb | 0:6aa04a8c8d4c | 30 | return; |
ejteb | 0:6aa04a8c8d4c | 31 | } |
ejteb | 0:6aa04a8c8d4c | 32 | |
ejteb | 0:6aa04a8c8d4c | 33 | void ultrasonic::_updateDist() |
ejteb | 0:6aa04a8c8d4c | 34 | { |
ejteb | 0:6aa04a8c8d4c | 35 | end = _t.read_us (); |
ejteb | 0:6aa04a8c8d4c | 36 | done = 1; |
ejteb | 0:6aa04a8c8d4c | 37 | //_t.stop(); |
ejteb | 0:6aa04a8c8d4c | 38 | // printf("_t.read_us()=%d\r\n", _t.read_us()); |
ejteb | 0:6aa04a8c8d4c | 39 | // printf("_t.read() = %f\r\n", _t.read()); |
ejteb | 0:6aa04a8c8d4c | 40 | // printf("_t.read_us()=%d\r\n", _t.read_us()); |
ejteb | 0:6aa04a8c8d4c | 41 | // printf("_t.read() = %f\r\n", _t.read()); |
ejteb | 0:6aa04a8c8d4c | 42 | _distance = (end - start)/6; |
ejteb | 0:6aa04a8c8d4c | 43 | |
ejteb | 0:6aa04a8c8d4c | 44 | //_t.reset(); |
ejteb | 0:6aa04a8c8d4c | 45 | _tout.detach(); |
ejteb | 0:6aa04a8c8d4c | 46 | _tout.attach(this,&ultrasonic::_startTrig, _updateSpeed); |
ejteb | 0:6aa04a8c8d4c | 47 | (*_onUpdateMethod)(_distance); |
ejteb | 0:6aa04a8c8d4c | 48 | } |
ejteb | 0:6aa04a8c8d4c | 49 | void ultrasonic::_startTrig(void) |
ejteb | 0:6aa04a8c8d4c | 50 | { |
ejteb | 0:6aa04a8c8d4c | 51 | _tout.detach(); |
ejteb | 0:6aa04a8c8d4c | 52 | //printf("_startTrig\r\n"); |
ejteb | 0:6aa04a8c8d4c | 53 | _trig=1; |
ejteb | 0:6aa04a8c8d4c | 54 | wait_us(10); |
ejteb | 0:6aa04a8c8d4c | 55 | done = 0; |
ejteb | 0:6aa04a8c8d4c | 56 | _echo.rise(this,&ultrasonic::_startT); |
ejteb | 0:6aa04a8c8d4c | 57 | _echo.fall(this,&ultrasonic::_updateDist); |
ejteb | 0:6aa04a8c8d4c | 58 | _echo.enable_irq (); |
ejteb | 0:6aa04a8c8d4c | 59 | _tout.attach(this,&ultrasonic::_startTrig,_timeout); |
ejteb | 0:6aa04a8c8d4c | 60 | _trig=0; |
ejteb | 0:6aa04a8c8d4c | 61 | |
ejteb | 0:6aa04a8c8d4c | 62 | |
ejteb | 0:6aa04a8c8d4c | 63 | } |
ejteb | 0:6aa04a8c8d4c | 64 | |
ejteb | 0:6aa04a8c8d4c | 65 | int ultrasonic::getCurrentDistance(void) |
ejteb | 0:6aa04a8c8d4c | 66 | { |
ejteb | 0:6aa04a8c8d4c | 67 | //printf("getCurrDistance\r\n"); |
ejteb | 0:6aa04a8c8d4c | 68 | return _distance; |
ejteb | 0:6aa04a8c8d4c | 69 | } |
ejteb | 0:6aa04a8c8d4c | 70 | void ultrasonic::pauseUpdates(void) |
ejteb | 0:6aa04a8c8d4c | 71 | { |
ejteb | 0:6aa04a8c8d4c | 72 | //printf("pauseUpdates\r\n"); |
ejteb | 0:6aa04a8c8d4c | 73 | _tout.detach(); |
ejteb | 0:6aa04a8c8d4c | 74 | _echo.rise(NULL); |
ejteb | 0:6aa04a8c8d4c | 75 | _echo.fall(NULL); |
ejteb | 0:6aa04a8c8d4c | 76 | } |
ejteb | 0:6aa04a8c8d4c | 77 | void ultrasonic::startUpdates(void) |
ejteb | 0:6aa04a8c8d4c | 78 | { |
ejteb | 0:6aa04a8c8d4c | 79 | //printf("startUpdates\r\n"); |
ejteb | 0:6aa04a8c8d4c | 80 | _startTrig(); |
ejteb | 0:6aa04a8c8d4c | 81 | /* while (1) |
ejteb | 0:6aa04a8c8d4c | 82 | { |
ejteb | 0:6aa04a8c8d4c | 83 | |
ejteb | 0:6aa04a8c8d4c | 84 | while (done == 0) |
ejteb | 0:6aa04a8c8d4c | 85 | { |
ejteb | 0:6aa04a8c8d4c | 86 | } |
ejteb | 0:6aa04a8c8d4c | 87 | // printf("_updateDist- t=%f, %d\r\n", _t.read(), start); |
ejteb | 0:6aa04a8c8d4c | 88 | // printf("_updateDist- t=%d, %d\r\n", end, start); |
ejteb | 0:6aa04a8c8d4c | 89 | printf("_updateDist- dist=%d\r\n", _distance); |
ejteb | 0:6aa04a8c8d4c | 90 | }*/ |
ejteb | 0:6aa04a8c8d4c | 91 | } |
ejteb | 0:6aa04a8c8d4c | 92 | void ultrasonic::attachOnUpdate(void method(int)) |
ejteb | 0:6aa04a8c8d4c | 93 | { |
ejteb | 0:6aa04a8c8d4c | 94 | _onUpdateMethod = method; |
ejteb | 0:6aa04a8c8d4c | 95 | } |
ejteb | 0:6aa04a8c8d4c | 96 | void ultrasonic::attachOnTrigger(void method(void)) |
ejteb | 0:6aa04a8c8d4c | 97 | { |
ejteb | 0:6aa04a8c8d4c | 98 | _onTriggerMethod = method; |
ejteb | 0:6aa04a8c8d4c | 99 | } |
ejteb | 0:6aa04a8c8d4c | 100 | void ultrasonic::attachOnStartTimer(void method(void)) |
ejteb | 0:6aa04a8c8d4c | 101 | { |
ejteb | 0:6aa04a8c8d4c | 102 | _onStartTimerMethod = method; |
ejteb | 0:6aa04a8c8d4c | 103 | } |
ejteb | 0:6aa04a8c8d4c | 104 | void ultrasonic::changeUpdateSpeed(float updateSpeed) |
ejteb | 0:6aa04a8c8d4c | 105 | { |
ejteb | 0:6aa04a8c8d4c | 106 | _updateSpeed = updateSpeed; |
ejteb | 0:6aa04a8c8d4c | 107 | } |
ejteb | 0:6aa04a8c8d4c | 108 | float ultrasonic::getUpdateSpeed() |
ejteb | 0:6aa04a8c8d4c | 109 | { |
ejteb | 0:6aa04a8c8d4c | 110 | return _updateSpeed; |
ejteb | 0:6aa04a8c8d4c | 111 | } |
ejteb | 0:6aa04a8c8d4c | 112 | |
ejteb | 0:6aa04a8c8d4c | 113 | /*void ultrasonic::ticktock(void) |
ejteb | 0:6aa04a8c8d4c | 114 | { |
ejteb | 0:6aa04a8c8d4c | 115 | tickcount += 1; |
ejteb | 0:6aa04a8c8d4c | 116 | }*/ |
ejteb | 0:6aa04a8c8d4c | 117 | int ultrasonic::isUpdated(void) |
ejteb | 0:6aa04a8c8d4c | 118 | { |
ejteb | 0:6aa04a8c8d4c | 119 | d=done; |
ejteb | 0:6aa04a8c8d4c | 120 | done = 0; |
ejteb | 0:6aa04a8c8d4c | 121 | return d; |
ejteb | 0:6aa04a8c8d4c | 122 | } |