Leong Kum Loong (NYP) / HCSR04

Dependents:   Utrasonic_Example

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?

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 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 }