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 HCSR04 by
Revision 1:e01896ab28d7, committed 2016-10-24
- Comitter:
- EmbeddedSam
- Date:
- Mon Oct 24 12:59:41 2016 +0000
- Parent:
- 0:86b2086be101
- Commit message:
- added timeout functionality
Changed in this revision
hcsr04.cpp | Show annotated file Show diff for this revision Revisions of this file |
hcsr04.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/hcsr04.cpp Mon Apr 14 08:23:09 2014 +0000 +++ b/hcsr04.cpp Mon Oct 24 12:59:41 2016 +0000 @@ -7,16 +7,55 @@ 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 - while(!echo); // start pulseIN - timer.start(); - while(echo); - timer.stop(); - return timer.read_us(); + + 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(); + } + } + + + + }
--- a/hcsr04.h Mon Apr 14 08:23:09 2014 +0000 +++ b/hcsr04.h Mon Oct 24 12:59:41 2016 +0000 @@ -39,11 +39,13 @@ HCSR04(PinName t, PinName e); long echo_duration(); long distance(); + bool timedOut; private: DigitalOut trig; DigitalIn echo; Timer timer; + Timer timeout_timer; long duration,distance_cm; };