Leong Kum Loong (NYP) / HCSR04

Dependents:   Utrasonic_Example

Committer:
reesey
Date:
Sun Dec 03 18:55:59 2017 +0000
Revision:
0:3373f4da46c1
Child:
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?

UserRevisionLine numberNew 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 //1 for CM & 2 for INCH
reesey 0:3373f4da46c1 45 switch(unit){
reesey 0:3373f4da46c1 46 case 1:
reesey 0:3373f4da46c1 47 divisor = 1; //Default divisor to get CM.
reesey 0:3373f4da46c1 48 break;
reesey 0:3373f4da46c1 49 case 2:
reesey 0:3373f4da46c1 50 divisor = 2.54; //Divisor to get INCH.
reesey 0:3373f4da46c1 51 break;
reesey 0:3373f4da46c1 52 }
reesey 0:3373f4da46c1 53
reesey 0:3373f4da46c1 54 interval.attach(findDistance, 0.1);
reesey 0:3373f4da46c1 55 }
reesey 0:3373f4da46c1 56
reesey 0:3373f4da46c1 57 //Retrieve distance stored.
reesey 0:3373f4da46c1 58 float readDistance(){
reesey 0:3373f4da46c1 59 return distance;
reesey 0:3373f4da46c1 60 }