Added timeout functionality

Fork of HCSR04 by Antoniolinux B.

hcsr04.cpp

Committer:
EmbeddedSam
Date:
2016-10-24
Revision:
1:e01896ab28d7
Parent:
0:86b2086be101

File content as of revision 1:e01896ab28d7:

#include "hcsr04.h"
#include "mbed.h"
/*
*HCSR04.cpp
*/
HCSR04::HCSR04(PinName t, PinName e) : trig(t), echo(e) {}
 long HCSR04::echo_duration() {
        
    timer.reset();  //reset timer
    timeout_timer.reset();
    
    //Initiate Trigger
    trig=0;   // trigger low 
    wait_us(2); //  wait 
    trig=1;   //  trigger high
    wait_us(10);
    trig=0;  // trigger low
    
    timeout_timer.start();
    
    while(!echo){
      //Wait for 5V/3.3V pulse to start
      if(timeout_timer.read_ms()>=10){ //100 ms timeout
          timedOut = true;
          break;      
          }
      }
      
      //Pulse Started
      if(timedOut == true){
          //Error, pulse didn't start for some reason
          timedOut = false;
          return 999999;  //error pulse not started in time
      }
      else
      {
        timeout_timer.reset();
        timer.start();
        timeout_timer.start(); 
        while(echo){
            if(timeout_timer.read_ms()>=10){
                timedOut = true;
                break;
            }        
        }
        if(timedOut == true){
          timedOut = false;
          return 999999;
          }
        else{
          timer.stop();
          return timer.read_us();     
          }  
      }
      
      
      

 
}
 
//return distance in cm 
long HCSR04::distance(){
    duration = echo_duration();
  distance_cm = (duration/2)/29.1  ;
        return distance_cm;

}