TVZ2019 / Mbed 2 deprecated 1_MIKROUPRAVLJACI

Dependencies:   mbed TextLCD

Committer:
jpapratov
Date:
Sat Nov 16 10:14:58 2019 +0000
Revision:
0:34c1f05d8d2c
Test.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jpapratov 0:34c1f05d8d2c 1 #include "mbed.h"
jpapratov 0:34c1f05d8d2c 2 #include "HCSR04.h"
jpapratov 0:34c1f05d8d2c 3
jpapratov 0:34c1f05d8d2c 4 HCSR04::HCSR04(PinName echoPin, PinName triggerPin) : echo(echoPin), trigger(triggerPin) {
jpapratov 0:34c1f05d8d2c 5 init();
jpapratov 0:34c1f05d8d2c 6 }
jpapratov 0:34c1f05d8d2c 7
jpapratov 0:34c1f05d8d2c 8 void HCSR04::init() {
jpapratov 0:34c1f05d8d2c 9 distance = -1; // initial distance
jpapratov 0:34c1f05d8d2c 10 minDistance = 2;
jpapratov 0:34c1f05d8d2c 11 maxDistance = 400;
jpapratov 0:34c1f05d8d2c 12 newDataReady = timerStarted = false;
jpapratov 0:34c1f05d8d2c 13 }
jpapratov 0:34c1f05d8d2c 14
jpapratov 0:34c1f05d8d2c 15 void HCSR04::startTimer() {
jpapratov 0:34c1f05d8d2c 16 if (!timerStarted) {
jpapratov 0:34c1f05d8d2c 17 timer.start(); // start the timer
jpapratov 0:34c1f05d8d2c 18 timerStarted = true;
jpapratov 0:34c1f05d8d2c 19 echoTimeout.attach_us(this, &HCSR04::stopTimer, 25000); // in case echo fall does not occur
jpapratov 0:34c1f05d8d2c 20 echo.fall(this, &HCSR04::stopTimer);
jpapratov 0:34c1f05d8d2c 21 echo.rise(NULL);
jpapratov 0:34c1f05d8d2c 22 }
jpapratov 0:34c1f05d8d2c 23 }
jpapratov 0:34c1f05d8d2c 24
jpapratov 0:34c1f05d8d2c 25 void HCSR04::stopTimer() {
jpapratov 0:34c1f05d8d2c 26 timer.stop(); // stop the timer
jpapratov 0:34c1f05d8d2c 27 if (timerStarted) {
jpapratov 0:34c1f05d8d2c 28 distance = timer.read() * 1e6 / 58;
jpapratov 0:34c1f05d8d2c 29 if (distance < minDistance)
jpapratov 0:34c1f05d8d2c 30 distance = minDistance;
jpapratov 0:34c1f05d8d2c 31 if (distance > maxDistance)
jpapratov 0:34c1f05d8d2c 32 distance = maxDistance;
jpapratov 0:34c1f05d8d2c 33 newDataReady = true;
jpapratov 0:34c1f05d8d2c 34 }
jpapratov 0:34c1f05d8d2c 35 timer.reset();
jpapratov 0:34c1f05d8d2c 36 timerStarted = false;
jpapratov 0:34c1f05d8d2c 37 echoTimeout.detach();
jpapratov 0:34c1f05d8d2c 38 echo.fall(NULL);
jpapratov 0:34c1f05d8d2c 39 }
jpapratov 0:34c1f05d8d2c 40
jpapratov 0:34c1f05d8d2c 41 void HCSR04::turnOffTrigger() {
jpapratov 0:34c1f05d8d2c 42 trigger = 0;
jpapratov 0:34c1f05d8d2c 43 }
jpapratov 0:34c1f05d8d2c 44
jpapratov 0:34c1f05d8d2c 45 void HCSR04::startMeasurement() {
jpapratov 0:34c1f05d8d2c 46 trigger = 1;
jpapratov 0:34c1f05d8d2c 47 triggerTimeout.attach_us(this, &HCSR04::turnOffTrigger, 10);
jpapratov 0:34c1f05d8d2c 48 echo.rise(this, &HCSR04::startTimer);
jpapratov 0:34c1f05d8d2c 49 newDataReady = false;
jpapratov 0:34c1f05d8d2c 50 }
jpapratov 0:34c1f05d8d2c 51
jpapratov 0:34c1f05d8d2c 52 float HCSR04::getDistance_cm() {
jpapratov 0:34c1f05d8d2c 53 newDataReady = false;
jpapratov 0:34c1f05d8d2c 54 return distance;
jpapratov 0:34c1f05d8d2c 55 }
jpapratov 0:34c1f05d8d2c 56
jpapratov 0:34c1f05d8d2c 57 float HCSR04::getDistance_mm() {
jpapratov 0:34c1f05d8d2c 58 newDataReady = false;
jpapratov 0:34c1f05d8d2c 59 return distance * 10;
jpapratov 0:34c1f05d8d2c 60 }
jpapratov 0:34c1f05d8d2c 61
jpapratov 0:34c1f05d8d2c 62 bool HCSR04::isNewDataReady() {
jpapratov 0:34c1f05d8d2c 63 return newDataReady;
jpapratov 0:34c1f05d8d2c 64 }
jpapratov 0:34c1f05d8d2c 65
jpapratov 0:34c1f05d8d2c 66 void HCSR04::setRanges(float minRange, float maxRange) {
jpapratov 0:34c1f05d8d2c 67 if (minRange < maxRange) {
jpapratov 0:34c1f05d8d2c 68 if (minRange >= 2 && minRange < 400) // bug from revs. 4 and 5 corrected
jpapratov 0:34c1f05d8d2c 69 minDistance = minRange;
jpapratov 0:34c1f05d8d2c 70 if (maxRange <= 400)
jpapratov 0:34c1f05d8d2c 71 maxDistance = maxRange;
jpapratov 0:34c1f05d8d2c 72 }
jpapratov 0:34c1f05d8d2c 73 }
jpapratov 0:34c1f05d8d2c 74
jpapratov 0:34c1f05d8d2c 75 float HCSR04::getMinRange() {
jpapratov 0:34c1f05d8d2c 76 return minDistance;
jpapratov 0:34c1f05d8d2c 77 }
jpapratov 0:34c1f05d8d2c 78
jpapratov 0:34c1f05d8d2c 79 float HCSR04::getMaxRange() {
jpapratov 0:34c1f05d8d2c 80 return maxDistance;
jpapratov 0:34c1f05d8d2c 81 }