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