test

Fork of HCSR04 by TVZ Mechatronics Team

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 }