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

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);