A distance measurement class using ultrasonic sensor HC-SR04.

Dependents:   Esercitazione4_4 HC-SR04 Group10_slave Oled_Gus ... more

The purpose of this library is to encourage students to develope their own classes. Instructions how to follow the development of this library for ultrasonic distance measurement are given here.

Committer:
tbjazic
Date:
Sat Dec 05 09:02:35 2015 +0000
Revision:
0:8871082486ac
Child:
3:9a7899cf5e3a
Initial library commit.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tbjazic 0:8871082486ac 1 #include "mbed.h"
tbjazic 0:8871082486ac 2 #include "HCSR04.h"
tbjazic 0:8871082486ac 3
tbjazic 0:8871082486ac 4 HCSR04::HCSR04(PinName echoPin, PinName triggerPin) : echo(echoPin), trigger(triggerPin) {
tbjazic 0:8871082486ac 5 init();
tbjazic 0:8871082486ac 6 }
tbjazic 0:8871082486ac 7
tbjazic 0:8871082486ac 8 void HCSR04::init() {
tbjazic 0:8871082486ac 9 /** configure the rising edge to start the timer */
tbjazic 0:8871082486ac 10 echo.rise(this, &HCSR04::startTimer);
tbjazic 0:8871082486ac 11
tbjazic 0:8871082486ac 12 /** configure the falling edge to stop the timer */
tbjazic 0:8871082486ac 13 echo.fall(this, &HCSR04::stopTimer);
tbjazic 0:8871082486ac 14
tbjazic 0:8871082486ac 15 distance = -1; // initial distance
tbjazic 0:8871082486ac 16 }
tbjazic 0:8871082486ac 17
tbjazic 0:8871082486ac 18 void HCSR04::startTimer() {
tbjazic 0:8871082486ac 19 timer.start(); // start the timer
tbjazic 0:8871082486ac 20 }
tbjazic 0:8871082486ac 21
tbjazic 0:8871082486ac 22 void HCSR04::stopTimer() {
tbjazic 0:8871082486ac 23 timer.stop(); // stop the timer
tbjazic 0:8871082486ac 24 }
tbjazic 0:8871082486ac 25
tbjazic 0:8871082486ac 26 void HCSR04::startMeasurement() {
tbjazic 0:8871082486ac 27 /** Start the measurement by sending the 10us trigger pulse. */
tbjazic 0:8871082486ac 28 trigger = 1;
tbjazic 0:8871082486ac 29 wait_us(10);
tbjazic 0:8871082486ac 30 trigger = 0;
tbjazic 0:8871082486ac 31
tbjazic 0:8871082486ac 32 /** Wait for the sensor to finish measurement (generate rise and fall interrupts).
tbjazic 0:8871082486ac 33 * Minimum wait time is determined by maximum measurement distance of 400 cm.
tbjazic 0:8871082486ac 34 * t_min = 400 * 58 = 23200 us = 23.2 ms */
tbjazic 0:8871082486ac 35 wait_ms(25);
tbjazic 0:8871082486ac 36
tbjazic 0:8871082486ac 37 /** calculate the distance in cm */
tbjazic 0:8871082486ac 38 distance = timer.read() * 1e6 / 58;
tbjazic 0:8871082486ac 39 timer.reset(); // reset the timer to 0 after storing the distance
tbjazic 0:8871082486ac 40 }
tbjazic 0:8871082486ac 41
tbjazic 0:8871082486ac 42 float HCSR04::getDistance_cm() {
tbjazic 0:8871082486ac 43 startMeasurement();
tbjazic 0:8871082486ac 44 return distance;
tbjazic 0:8871082486ac 45 }