Kim Nielsen / Mbed 2 deprecated PRO1

Dependencies:   mbed

Fork of PRO1 by E2016-S1-Team5

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers HCSR04.cpp Source File

HCSR04.cpp

00001 #include "mbed.h"
00002 #include "HCSR04.h"
00003 
00004 HCSR04::HCSR04(PinName echoPin, PinName triggerPin) : echo(echoPin), trigger(triggerPin) {
00005     init();
00006 }
00007 
00008 void HCSR04::init() {
00009     /** configure the rising edge to start the timer */
00010     echo.rise(this, &HCSR04::startTimer);
00011     
00012     /** configure the falling edge to stop the timer */
00013     echo.fall(this, &HCSR04::stopTimer);
00014     
00015     distance = -1;      // initial distance
00016     minDistance = 2;
00017     maxDistance = 400;
00018 }
00019 
00020 void HCSR04::startTimer() {
00021     timer.start(); // start the timer
00022 }
00023 
00024 void HCSR04::stopTimer() {
00025     timer.stop(); // stop the timer
00026 }
00027 
00028 void HCSR04::startMeasurement() {
00029     trigger = 1;
00030     wait_us(10);
00031     trigger = 0;
00032     wait_ms(25); // just enough time to measure 400 cm
00033     timer.stop(); // just in case echo fall did not occur
00034     distance = timer.read() * 1e6 / 58;
00035     if (distance < minDistance)
00036         distance = minDistance;
00037     if (distance > maxDistance)
00038         distance = maxDistance;
00039     timer.reset();
00040 }
00041 
00042 float HCSR04::getDistance_cm() {
00043     startMeasurement();
00044     return distance;
00045 }
00046 
00047 float HCSR04::getDistance_mm() {
00048     startMeasurement();
00049     return distance * 10;
00050 }
00051 
00052 void HCSR04::setRanges(float minRange, float maxRange) {
00053     if (minRange < maxRange) {
00054         if (minRange >= 2) 
00055             minDistance = minRange;
00056         if (maxRange <= 400)
00057             maxDistance = maxRange;
00058     }
00059 }
00060 
00061 float HCSR04::getMinRange() {
00062     return minDistance;
00063 }
00064 
00065 float HCSR04::getMaxRange() {
00066     return maxDistance;
00067 }