Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of HC_SR04_Ultrasonic_Library by
ultrasonic.cpp
00001 #include "ultrasonic.h" 00002 00003 ultrasonic::ultrasonic(PinName trigPin, PinName echoPin, float updateSpeed, float timeout):_trig(trigPin), _echo(echoPin) 00004 { 00005 _onUpdateMethod=NULL; 00006 _updateSpeed = updateSpeed; 00007 _timeout = timeout; 00008 _t.start (); 00009 } 00010 00011 ultrasonic::ultrasonic(PinName trigPin, PinName echoPin, float updateSpeed, float timeout, void onUpdate(int)) 00012 :_trig(trigPin), _echo(echoPin) 00013 { 00014 _onUpdateMethod=onUpdate; 00015 _updateSpeed = updateSpeed; 00016 _timeout = timeout; 00017 _t.start (); 00018 } 00019 void ultrasonic::_startT() 00020 { 00021 if(_t.read()>600) 00022 { 00023 _t.reset (); 00024 } 00025 start = _t.read_us (); 00026 } 00027 00028 void ultrasonic::_updateDist() 00029 { 00030 end = _t.read_us (); 00031 done = 1; 00032 _distance = (end - start)/6; 00033 _tout.detach(); 00034 _tout.attach(this,&ultrasonic::_startTrig, _updateSpeed); 00035 } 00036 void ultrasonic::_startTrig(void) 00037 { 00038 _tout.detach(); 00039 _trig=1; 00040 wait_us(10); 00041 done = 0; 00042 _echo.rise(this,&ultrasonic::_startT); 00043 _echo.fall(this,&ultrasonic::_updateDist); 00044 _echo.enable_irq (); 00045 _tout.attach(this,&ultrasonic::_startTrig,_timeout); 00046 _trig=0; 00047 } 00048 00049 int ultrasonic::getCurrentDistance(void) 00050 { 00051 return _distance; 00052 } 00053 void ultrasonic::pauseUpdates(void) 00054 { 00055 _tout.detach(); 00056 _echo.rise(NULL); 00057 _echo.fall(NULL); 00058 } 00059 void ultrasonic::startUpdates(void) 00060 { 00061 _startTrig(); 00062 } 00063 void ultrasonic::attachOnUpdate(void method(int)) 00064 { 00065 _onUpdateMethod = method; 00066 } 00067 void ultrasonic::changeUpdateSpeed(float updateSpeed) 00068 { 00069 _updateSpeed = updateSpeed; 00070 } 00071 float ultrasonic::getUpdateSpeed() 00072 { 00073 return _updateSpeed; 00074 } 00075 int ultrasonic::isUpdated(void) 00076 { 00077 //printf("%d", done); 00078 d=done; 00079 done = 0; 00080 return d; 00081 } 00082 void ultrasonic::checkDistance(void) 00083 { 00084 if(isUpdated()) 00085 { 00086 if (_onUpdateMethod) (*_onUpdateMethod)(_distance); 00087 } 00088 }
Generated on Mon Aug 8 2022 21:11:22 by
1.7.2
