Ultrasound Ranging Sensor module

Dependents:   Lets_move_Seki2018_ver2 Lets_move_Seki2018_null UNKO_FINAL_PlamA_2 UNKO_FINAL_PlanA

Fork of HCSR04 by Prabhu Desai

Revision:
8:e150242bce6b
Parent:
6:4be4fcd0c171
--- a/hcsr04.cpp	Sat Mar 30 18:55:03 2013 +0000
+++ b/hcsr04.cpp	Wed Sep 05 15:06:24 2018 +0000
@@ -24,6 +24,7 @@
 HCSR04::HCSR04(PinName TrigPin,PinName EchoPin):
     trigger(TrigPin), echo(EchoPin)
 {
+    setTemp(15);
     pulsetime.stop();
     pulsetime.reset();
     echo.rise(this,&HCSR04::isr_rise);
@@ -35,22 +36,36 @@
 {
 }
 
-void HCSR04::isr_rise(void)
-{
-    pulsetime.start();
-}
 void HCSR04::start(void)
 {
+    pulsetime_us = pulsetime.read_us();
+    if(pulsetime_us > maxTime){
+        pulsetime.stop();
+        pulsetime.reset();
+        trigger=1;
+        trigger=0;
+    }
     trigger=1;
     wait_us(10);
     trigger=0;
 }
 
+void HCSR04::isr_rise(void)
+{
+    pulsetime.start();
+}
+
 void HCSR04::isr_fall(void)
 {
     pulsetime.stop();
-    pulsedur = pulsetime.read_us();
-    distance= (pulsedur*343)/20000;
+    pulsetime_us = pulsetime.read_us();
+    if(pulsetime_us > maxTime){
+        trigger=1;
+        trigger=0;
+        distance = 0;
+    }else{
+    distance = pulsetime_us*sonic/20000;
+    }
     pulsetime.reset();
 }
 
@@ -67,13 +82,13 @@
 {
     return distance;
 }
-unsigned int HCSR04::get_pulse_us()
-{
-    return pulsedur;
+
+void HCSR04::setTemp(int temp){
+    temperature = temp;
+    sonic = 331.5+0.61*temperature;
+    maxTime = 10*1000000/sonic;
 }
 
-
-
 /*******************************************************
    Here is a sample code usage
 ********************************************************* 
@@ -82,6 +97,7 @@
 int main()
 {
     unsigned char count=0;
+    setTep(20);
     while(1) {
         usensor.start();
         wait_ms(500);