han back
/
CLEO_UART_ULTRASONIC_DC
SMART CLEO Ultrasonic DC
HCSR04/HCSR04.cpp
- Committer:
- SMART_CLEO
- Date:
- 2017-12-06
- Revision:
- 0:36e2fa5ac56d
File content as of revision 0:36e2fa5ac56d:
#include "mbed.h" #include "HCSR04.h" HCSR04::HCSR04(PinName echoPin, PinName triggerPin) : echo(echoPin), trigger(triggerPin) { init(); } void HCSR04::init() { distance = -1; // initial distance minDistance = 2; maxDistance = 400; newDataReady = timerStarted = false; } void HCSR04::startTimer() { if (!timerStarted) { timer.start(); // start the timer timerStarted = true; echoTimeout.attach_us(this, &HCSR04::stopTimer, 25000); // in case echo fall does not occur echo.fall(this, &HCSR04::stopTimer); echo.rise(NULL); } } void HCSR04::stopTimer() { timer.stop(); // stop the timer if (timerStarted) { distance = timer.read() * 1e6 / 58; if (distance < minDistance) distance = minDistance; if (distance > maxDistance) distance = maxDistance; newDataReady = true; } timer.reset(); timerStarted = false; echoTimeout.detach(); echo.fall(NULL); } void HCSR04::turnOffTrigger() { trigger = 0; } void HCSR04::startMeasurement() { trigger = 1; triggerTimeout.attach_us(this, &HCSR04::turnOffTrigger, 10); echo.rise(this, &HCSR04::startTimer); newDataReady = false; } float HCSR04::getDistance_cm() { newDataReady = false; return distance; } float HCSR04::getDistance_mm() { newDataReady = false; return distance * 10; } bool HCSR04::isNewDataReady() { return newDataReady; } void HCSR04::setRanges(float minRange, float maxRange) { if (minRange < maxRange) { if (minRange >= 2 && minRange < 400) // bug from revs. 4 and 5 corrected minDistance = minRange; if (maxRange <= 400) maxDistance = maxRange; } } float HCSR04::getMinRange() { return minDistance; } float HCSR04::getMaxRange() { return maxDistance; }