4180

Dependencies:   mbed mbed-rtos PinDetect

Committer:
rpavoor3
Date:
Mon Apr 27 23:18:38 2020 +0000
Revision:
0:0ca943ce4014
4180 Your Fitness Buddy

Who changed what in which revision?

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