Cheap ultrasonic range finder works with interrupts. Fork of original https://os.mbed.com/components/HC-SR04/ and update for MbedOS6+
Dependents: Nucleo_UltrasonicHelloWorld xxx_Sonar-HC-SR04_Lsg
Diff: ultrasonic.cpp
- Revision:
- 5:6fd0e9c7ead4
- Parent:
- 4:e0f9c9fb4cf3
--- a/ultrasonic.cpp Mon Nov 24 20:23:07 2014 +0000 +++ b/ultrasonic.cpp Thu Jun 10 18:45:59 2021 +0000 @@ -1,12 +1,12 @@ #include "ultrasonic.h" - ultrasonic::ultrasonic(PinName trigPin, PinName echoPin, float updateSpeed, float timeout):_trig(trigPin), _echo(echoPin) + ultrasonic::ultrasonic(PinName trigPin, PinName echoPin, Kernel::Clock::duration_u32 updateSpeed, Kernel::Clock::duration_u32 timeout):_trig(trigPin), _echo(echoPin) { _updateSpeed = updateSpeed; _timeout = timeout; } - ultrasonic::ultrasonic(PinName trigPin, PinName echoPin, float updateSpeed, float timeout, void onUpdate(int)) + ultrasonic::ultrasonic(PinName trigPin, PinName echoPin, Kernel::Clock::duration_u32 updateSpeed, Kernel::Clock::duration_u32 timeout, void onUpdate(int)) :_trig(trigPin), _echo(echoPin) { _onUpdateMethod=onUpdate; @@ -16,20 +16,20 @@ } void ultrasonic::_startT() { - if(_t.read()>600) + if(chrono::duration_cast<chrono::milliseconds>(_t.elapsed_time()).count()>600) { _t.reset (); } - start = _t.read_us (); + start = chrono::duration_cast<chrono::microseconds>(_t.elapsed_time()).count(); } void ultrasonic::_updateDist() { - end = _t.read_us (); + end = chrono::duration_cast<chrono::microseconds>(_t.elapsed_time()).count(); done = 1; _distance = (end - start)/6; _tout.detach(); - _tout.attach(this,&ultrasonic::_startTrig, _updateSpeed); + _tout.attach(callback(this,&ultrasonic::_startTrig), _updateSpeed); } void ultrasonic::_startTrig(void) { @@ -37,10 +37,10 @@ _trig=1; wait_us(10); done = 0; - _echo.rise(this,&ultrasonic::_startT); - _echo.fall(this,&ultrasonic::_updateDist); + _echo.rise(callback(this,&ultrasonic::_startT)); + _echo.fall(callback(this,&ultrasonic::_updateDist)); _echo.enable_irq (); - _tout.attach(this,&ultrasonic::_startTrig,_timeout); + _tout.attach(callback(this,&ultrasonic::_startTrig),_timeout); _trig=0; } @@ -62,14 +62,10 @@ { _onUpdateMethod = method; } - void ultrasonic::changeUpdateSpeed(float updateSpeed) + void ultrasonic::changeUpdateSpeed(Kernel::Clock::duration_u32 updateSpeed) { _updateSpeed = updateSpeed; } - float ultrasonic::getUpdateSpeed() - { - return _updateSpeed; - } int ultrasonic::isUpdated(void) { //printf("%d", done);