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.
HCSR04.cpp@2:c9ffa237213b, 2017-12-04 (annotated)
- Committer:
- reesey
- Date:
- Mon Dec 04 04:35:49 2017 +0000
- Revision:
- 2:c9ffa237213b
- Parent:
- 1:27ee973552a9
Written by Leong Kum Loong.; 04 Dec 2017, REV. 0; ; When HCSR04.h reference is included, DO NOT declare pin p21 & p22 as it is used by my library.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| reesey | 0:3373f4da46c1 | 1 | #include "mbed.h" |
| reesey | 0:3373f4da46c1 | 2 | #include "HCSR04.h" |
| reesey | 0:3373f4da46c1 | 3 | /* |
| reesey | 0:3373f4da46c1 | 4 | HCSR04.h |
| reesey | 0:3373f4da46c1 | 5 | Written by Leong Kum Loong. |
| reesey | 0:3373f4da46c1 | 6 | 04 Dec 2017, REV. 0 |
| reesey | 0:3373f4da46c1 | 7 | |
| reesey | 0:3373f4da46c1 | 8 | All routines and functions in this library are written by me solely. |
| reesey | 0:3373f4da46c1 | 9 | Library for HC-SR04 Ultrasonic Ranging sensor. |
| reesey | 0:3373f4da46c1 | 10 | Library uses pins p21 to send pulse to sensor Trigger input & p22 to read sensor Echo output. |
| reesey | 0:3373f4da46c1 | 11 | This is assuming velocity of sound rate from ultrasonic pulse is 340m/s. |
| reesey | 0:3373f4da46c1 | 12 | */ |
| reesey | 0:3373f4da46c1 | 13 | |
| reesey | 0:3373f4da46c1 | 14 | DigitalOut trig(p21); |
| reesey | 0:3373f4da46c1 | 15 | DigitalIn echo(p22); |
| reesey | 0:3373f4da46c1 | 16 | Timer echoTime; |
| reesey | 0:3373f4da46c1 | 17 | Ticker interval; |
| reesey | 0:3373f4da46c1 | 18 | |
| reesey | 0:3373f4da46c1 | 19 | float distance = 0; |
| reesey | 0:3373f4da46c1 | 20 | |
| reesey | 0:3373f4da46c1 | 21 | float divisor; |
| reesey | 0:3373f4da46c1 | 22 | |
| reesey | 0:3373f4da46c1 | 23 | static void findDistance(){ |
| reesey | 0:3373f4da46c1 | 24 | trig = 1; |
| reesey | 0:3373f4da46c1 | 25 | wait_ms(10); |
| reesey | 0:3373f4da46c1 | 26 | trig = 0; |
| reesey | 0:3373f4da46c1 | 27 | wait_ms(20); |
| reesey | 0:3373f4da46c1 | 28 | |
| reesey | 0:3373f4da46c1 | 29 | trig = 1; |
| reesey | 0:3373f4da46c1 | 30 | wait_us(10); |
| reesey | 0:3373f4da46c1 | 31 | trig = 0; |
| reesey | 0:3373f4da46c1 | 32 | |
| reesey | 0:3373f4da46c1 | 33 | while(!echo); |
| reesey | 0:3373f4da46c1 | 34 | echoTime.start(); |
| reesey | 0:3373f4da46c1 | 35 | while(echo); |
| reesey | 0:3373f4da46c1 | 36 | echoTime.stop(); |
| reesey | 0:3373f4da46c1 | 37 | |
| reesey | 0:3373f4da46c1 | 38 | distance = (float)echoTime.read_us()/(float)2 * 0.034 / (float)divisor; |
| reesey | 0:3373f4da46c1 | 39 | echoTime.reset(); |
| reesey | 0:3373f4da46c1 | 40 | } |
| reesey | 0:3373f4da46c1 | 41 | |
| reesey | 0:3373f4da46c1 | 42 | //Start monitoring distance. |
| reesey | 0:3373f4da46c1 | 43 | void getDistance(int unit){ |
| reesey | 0:3373f4da46c1 | 44 | switch(unit){ |
| reesey | 0:3373f4da46c1 | 45 | case 1: |
| reesey | 0:3373f4da46c1 | 46 | divisor = 1; //Default divisor to get CM. |
| reesey | 0:3373f4da46c1 | 47 | break; |
| reesey | 0:3373f4da46c1 | 48 | case 2: |
| reesey | 0:3373f4da46c1 | 49 | divisor = 2.54; //Divisor to get INCH. |
| reesey | 0:3373f4da46c1 | 50 | break; |
| reesey | 0:3373f4da46c1 | 51 | } |
| reesey | 0:3373f4da46c1 | 52 | |
| reesey | 2:c9ffa237213b | 53 | interval.attach(findDistance, 0.05); |
| reesey | 0:3373f4da46c1 | 54 | } |
| reesey | 0:3373f4da46c1 | 55 | |
| reesey | 0:3373f4da46c1 | 56 | //Retrieve distance stored. |
| reesey | 0:3373f4da46c1 | 57 | float readDistance(){ |
| reesey | 0:3373f4da46c1 | 58 | return distance; |
| reesey | 0:3373f4da46c1 | 59 | } |