ECE 4180 / HC_SR04_Ultrasonic_Library

Dependents:   4180Lab3Part1

Committer:
khuifang2202
Date:
Sat Feb 16 18:20:09 2019 +0000
Revision:
5:cc084768bab9
Parent:
4:e0f9c9fb4cf3
huifang;

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 _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 }