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 _updateSpeed = updateSpeed; 00006 _timeout = timeout; 00007 } 00008 00009 ultrasonic::ultrasonic(PinName trigPin, PinName echoPin, float updateSpeed, float timeout, void onUpdate(int)) 00010 :_trig(trigPin), _echo(echoPin) 00011 { 00012 _onUpdateMethod=onUpdate; 00013 _updateSpeed = updateSpeed; 00014 _timeout = timeout; 00015 _t.start (); 00016 } 00017 void ultrasonic::_startT() 00018 { 00019 if(_t.read()>600) 00020 { 00021 _t.reset (); 00022 } 00023 start = _t.read_us (); 00024 } 00025 00026 void ultrasonic::_updateDist() 00027 { 00028 end = _t.read_us (); 00029 done = 1; 00030 _distance = (end - start)/6; 00031 _tout.detach(); 00032 _tout.attach(this,&ultrasonic::_startTrig, _updateSpeed); 00033 } 00034 void ultrasonic::_startTrig(void) 00035 { 00036 _tout.detach(); 00037 _trig=1; 00038 wait_us(10); 00039 done = 0; 00040 _echo.rise(this,&ultrasonic::_startT); 00041 _echo.fall(this,&ultrasonic::_updateDist); 00042 _echo.enable_irq (); 00043 _tout.attach(this,&ultrasonic::_startTrig,_timeout); 00044 _trig=0; 00045 } 00046 00047 int ultrasonic::getCurrentDistance(void) 00048 { 00049 return _distance; 00050 } 00051 void ultrasonic::pauseUpdates(void) 00052 { 00053 _tout.detach(); 00054 _echo.rise(NULL); 00055 _echo.fall(NULL); 00056 } 00057 void ultrasonic::startUpdates(void) 00058 { 00059 _startTrig(); 00060 } 00061 void ultrasonic::attachOnUpdate(void method(int)) 00062 { 00063 _onUpdateMethod = method; 00064 } 00065 void ultrasonic::changeUpdateSpeed(float updateSpeed) 00066 { 00067 _updateSpeed = updateSpeed; 00068 } 00069 float ultrasonic::getUpdateSpeed() 00070 { 00071 return _updateSpeed; 00072 } 00073 int ultrasonic::isUpdated(void) 00074 { 00075 //printf("%d", done); 00076 d=done; 00077 done = 0; 00078 return d; 00079 } 00080 void ultrasonic::checkDistance(void) 00081 { 00082 if(isUpdated()) 00083 { 00084 (*_onUpdateMethod)(_distance); 00085 } 00086 }
Generated on Wed Jul 13 2022 06:28:11 by
1.7.2
