otamesi

Dependencies:   mbed

Committer:
seangshim
Date:
Sat Feb 16 05:40:24 2019 +0000
Revision:
41:7c537a922510
Parent:
0:a01fda36fde8
nei

Who changed what in which revision?

UserRevisionLine numberNew contents of line
seangshim 0:a01fda36fde8 1 #include "ultrasonic.h"
seangshim 0:a01fda36fde8 2
seangshim 0:a01fda36fde8 3 ultrasonic::ultrasonic(PinName trigPin, PinName echoPin, float updateSpeed, float timeout):_trig(trigPin), _echo(echoPin)
seangshim 0:a01fda36fde8 4 {
seangshim 0:a01fda36fde8 5 _updateSpeed = updateSpeed;
seangshim 0:a01fda36fde8 6 _timeout = timeout;
seangshim 0:a01fda36fde8 7 }
seangshim 0:a01fda36fde8 8
seangshim 0:a01fda36fde8 9 ultrasonic::ultrasonic(PinName trigPin, PinName echoPin, float updateSpeed, float timeout, void onUpdate(int))
seangshim 0:a01fda36fde8 10 :_trig(trigPin), _echo(echoPin)
seangshim 0:a01fda36fde8 11 {
seangshim 0:a01fda36fde8 12 _onUpdateMethod=onUpdate;
seangshim 0:a01fda36fde8 13 _updateSpeed = updateSpeed;
seangshim 0:a01fda36fde8 14 _timeout = timeout;
seangshim 0:a01fda36fde8 15 _t.start ();
seangshim 0:a01fda36fde8 16 }
seangshim 0:a01fda36fde8 17 void ultrasonic::_startT()
seangshim 0:a01fda36fde8 18 {
seangshim 0:a01fda36fde8 19 if(_t.read()>600)
seangshim 0:a01fda36fde8 20 {
seangshim 0:a01fda36fde8 21 _t.reset ();
seangshim 0:a01fda36fde8 22 }
seangshim 0:a01fda36fde8 23 start = _t.read_us ();
seangshim 0:a01fda36fde8 24 }
seangshim 0:a01fda36fde8 25
seangshim 0:a01fda36fde8 26 void ultrasonic::_updateDist()
seangshim 0:a01fda36fde8 27 {
seangshim 0:a01fda36fde8 28 end = _t.read_us ();
seangshim 0:a01fda36fde8 29 done = 1;
seangshim 0:a01fda36fde8 30 _distance = (end - start)/6;
seangshim 0:a01fda36fde8 31 _tout.detach();
seangshim 0:a01fda36fde8 32 _tout.attach(this,&ultrasonic::_startTrig, _updateSpeed);
seangshim 0:a01fda36fde8 33 }
seangshim 0:a01fda36fde8 34 void ultrasonic::_startTrig(void)
seangshim 0:a01fda36fde8 35 {
seangshim 0:a01fda36fde8 36 _tout.detach();
seangshim 0:a01fda36fde8 37 _trig=1;
seangshim 0:a01fda36fde8 38 wait_us(10);
seangshim 0:a01fda36fde8 39 done = 0;
seangshim 0:a01fda36fde8 40 _echo.rise(this,&ultrasonic::_startT);
seangshim 0:a01fda36fde8 41 _echo.fall(this,&ultrasonic::_updateDist);
seangshim 0:a01fda36fde8 42 _echo.enable_irq ();
seangshim 0:a01fda36fde8 43 _tout.attach(this,&ultrasonic::_startTrig,_timeout);
seangshim 0:a01fda36fde8 44 _trig=0;
seangshim 0:a01fda36fde8 45 }
seangshim 0:a01fda36fde8 46
seangshim 0:a01fda36fde8 47 int ultrasonic::getCurrentDistance(void)
seangshim 0:a01fda36fde8 48 {
seangshim 0:a01fda36fde8 49 return _distance;
seangshim 0:a01fda36fde8 50 }
seangshim 0:a01fda36fde8 51 void ultrasonic::pauseUpdates(void)
seangshim 0:a01fda36fde8 52 {
seangshim 0:a01fda36fde8 53 _tout.detach();
seangshim 0:a01fda36fde8 54 _echo.rise(NULL);
seangshim 0:a01fda36fde8 55 _echo.fall(NULL);
seangshim 0:a01fda36fde8 56 }
seangshim 0:a01fda36fde8 57 void ultrasonic::startUpdates(void)
seangshim 0:a01fda36fde8 58 {
seangshim 0:a01fda36fde8 59 _startTrig();
seangshim 0:a01fda36fde8 60 }
seangshim 0:a01fda36fde8 61 void ultrasonic::attachOnUpdate(void method(int))
seangshim 0:a01fda36fde8 62 {
seangshim 0:a01fda36fde8 63 _onUpdateMethod = method;
seangshim 0:a01fda36fde8 64 }
seangshim 0:a01fda36fde8 65 void ultrasonic::changeUpdateSpeed(float updateSpeed)
seangshim 0:a01fda36fde8 66 {
seangshim 0:a01fda36fde8 67 _updateSpeed = updateSpeed;
seangshim 0:a01fda36fde8 68 }
seangshim 0:a01fda36fde8 69 float ultrasonic::getUpdateSpeed()
seangshim 0:a01fda36fde8 70 {
seangshim 0:a01fda36fde8 71 return _updateSpeed;
seangshim 0:a01fda36fde8 72 }
seangshim 0:a01fda36fde8 73 int ultrasonic::isUpdated(void)
seangshim 0:a01fda36fde8 74 {
seangshim 0:a01fda36fde8 75 //printf("%d", done);
seangshim 0:a01fda36fde8 76 d=done;
seangshim 0:a01fda36fde8 77 done = 0;
seangshim 0:a01fda36fde8 78 return d;
seangshim 0:a01fda36fde8 79 }
seangshim 0:a01fda36fde8 80 void ultrasonic::checkDistance(void)
seangshim 0:a01fda36fde8 81 {
seangshim 0:a01fda36fde8 82 if(isUpdated())
seangshim 0:a01fda36fde8 83 {
seangshim 0:a01fda36fde8 84 (*_onUpdateMethod)(_distance);
seangshim 0:a01fda36fde8 85 }
seangshim 0:a01fda36fde8 86 }