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 //Consider scaling this using integer ops (? 00031 _distance = (end - start)/148; 00032 _tout.detach(); 00033 _tout.attach(this,&ultrasonic::_startTrig, _updateSpeed); 00034 } 00035 void ultrasonic::_startTrig(void) 00036 { 00037 _tout.detach(); 00038 _trig=1; 00039 wait_us(10); 00040 done = 0; 00041 _echo.rise(this,&ultrasonic::_startT); 00042 _echo.fall(this,&ultrasonic::_updateDist); 00043 _echo.enable_irq (); 00044 _tout.attach(this,&ultrasonic::_startTrig,_timeout); 00045 _trig=0; 00046 } 00047 00048 int ultrasonic::getCurrentDistance(void) 00049 { 00050 return _distance; 00051 } 00052 void ultrasonic::pauseUpdates(void) 00053 { 00054 _tout.detach(); 00055 _echo.rise(NULL); 00056 _echo.fall(NULL); 00057 } 00058 void ultrasonic::startUpdates(void) 00059 { 00060 _startTrig(); 00061 } 00062 void ultrasonic::attachOnUpdate(void method(int)) 00063 { 00064 _onUpdateMethod = method; 00065 } 00066 void ultrasonic::changeUpdateSpeed(float updateSpeed) 00067 { 00068 _updateSpeed = updateSpeed; 00069 } 00070 float ultrasonic::getUpdateSpeed() 00071 { 00072 return _updateSpeed; 00073 } 00074 int ultrasonic::isUpdated(void) 00075 { 00076 //printf("%d", done); 00077 d=done; 00078 done = 0; 00079 return d; 00080 } 00081 void ultrasonic::checkDistance(void) 00082 { 00083 if(isUpdated()) 00084 { 00085 (*_onUpdateMethod)(_distance); 00086 } 00087 }
Generated on Wed Jul 20 2022 17:34:08 by
1.7.2
