Updated version of the library to deal with the constructor without onUpdate callback function.
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