Library for using HC-SR04 with some API Documentation added

Fork of HC_SR04_Ultrasonic_Library by EJ Teb

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?

UserRevisionLine numberNew 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 }