
Kildekode til robot
Fork of PRO1 by
HCSR04.cpp@1:396a582e8861, 2016-10-31 (annotated)
- Committer:
- kimnielsen
- Date:
- Mon Oct 31 10:00:46 2016 +0000
- Revision:
- 1:396a582e8861
- Parent:
- 0:d3dbe632b1a9
added double
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kimnielsen | 0:d3dbe632b1a9 | 1 | #include "mbed.h" |
kimnielsen | 0:d3dbe632b1a9 | 2 | #include "HCSR04.h" |
kimnielsen | 0:d3dbe632b1a9 | 3 | |
kimnielsen | 0:d3dbe632b1a9 | 4 | HCSR04::HCSR04(PinName echoPin, PinName triggerPin) : echo(echoPin), trigger(triggerPin) { |
kimnielsen | 0:d3dbe632b1a9 | 5 | init(); |
kimnielsen | 0:d3dbe632b1a9 | 6 | } |
kimnielsen | 0:d3dbe632b1a9 | 7 | |
kimnielsen | 0:d3dbe632b1a9 | 8 | void HCSR04::init() { |
kimnielsen | 0:d3dbe632b1a9 | 9 | /** configure the rising edge to start the timer */ |
kimnielsen | 0:d3dbe632b1a9 | 10 | echo.rise(this, &HCSR04::startTimer); |
kimnielsen | 0:d3dbe632b1a9 | 11 | |
kimnielsen | 0:d3dbe632b1a9 | 12 | /** configure the falling edge to stop the timer */ |
kimnielsen | 0:d3dbe632b1a9 | 13 | echo.fall(this, &HCSR04::stopTimer); |
kimnielsen | 0:d3dbe632b1a9 | 14 | |
kimnielsen | 0:d3dbe632b1a9 | 15 | distance = -1; // initial distance |
kimnielsen | 0:d3dbe632b1a9 | 16 | minDistance = 2; |
kimnielsen | 0:d3dbe632b1a9 | 17 | maxDistance = 400; |
kimnielsen | 0:d3dbe632b1a9 | 18 | } |
kimnielsen | 0:d3dbe632b1a9 | 19 | |
kimnielsen | 0:d3dbe632b1a9 | 20 | void HCSR04::startTimer() { |
kimnielsen | 0:d3dbe632b1a9 | 21 | timer.start(); // start the timer |
kimnielsen | 0:d3dbe632b1a9 | 22 | } |
kimnielsen | 0:d3dbe632b1a9 | 23 | |
kimnielsen | 0:d3dbe632b1a9 | 24 | void HCSR04::stopTimer() { |
kimnielsen | 0:d3dbe632b1a9 | 25 | timer.stop(); // stop the timer |
kimnielsen | 0:d3dbe632b1a9 | 26 | } |
kimnielsen | 0:d3dbe632b1a9 | 27 | |
kimnielsen | 0:d3dbe632b1a9 | 28 | void HCSR04::startMeasurement() { |
kimnielsen | 0:d3dbe632b1a9 | 29 | trigger = 1; |
kimnielsen | 0:d3dbe632b1a9 | 30 | wait_us(10); |
kimnielsen | 0:d3dbe632b1a9 | 31 | trigger = 0; |
kimnielsen | 0:d3dbe632b1a9 | 32 | wait_ms(25); // just enough time to measure 400 cm |
kimnielsen | 0:d3dbe632b1a9 | 33 | timer.stop(); // just in case echo fall did not occur |
kimnielsen | 0:d3dbe632b1a9 | 34 | distance = timer.read() * 1e6 / 58; |
kimnielsen | 0:d3dbe632b1a9 | 35 | if (distance < minDistance) |
kimnielsen | 0:d3dbe632b1a9 | 36 | distance = minDistance; |
kimnielsen | 0:d3dbe632b1a9 | 37 | if (distance > maxDistance) |
kimnielsen | 0:d3dbe632b1a9 | 38 | distance = maxDistance; |
kimnielsen | 0:d3dbe632b1a9 | 39 | timer.reset(); |
kimnielsen | 0:d3dbe632b1a9 | 40 | } |
kimnielsen | 0:d3dbe632b1a9 | 41 | |
kimnielsen | 0:d3dbe632b1a9 | 42 | float HCSR04::getDistance_cm() { |
kimnielsen | 0:d3dbe632b1a9 | 43 | startMeasurement(); |
kimnielsen | 0:d3dbe632b1a9 | 44 | return distance; |
kimnielsen | 0:d3dbe632b1a9 | 45 | } |
kimnielsen | 0:d3dbe632b1a9 | 46 | |
kimnielsen | 0:d3dbe632b1a9 | 47 | float HCSR04::getDistance_mm() { |
kimnielsen | 0:d3dbe632b1a9 | 48 | startMeasurement(); |
kimnielsen | 0:d3dbe632b1a9 | 49 | return distance * 10; |
kimnielsen | 0:d3dbe632b1a9 | 50 | } |
kimnielsen | 0:d3dbe632b1a9 | 51 | |
kimnielsen | 0:d3dbe632b1a9 | 52 | void HCSR04::setRanges(float minRange, float maxRange) { |
kimnielsen | 0:d3dbe632b1a9 | 53 | if (minRange < maxRange) { |
kimnielsen | 0:d3dbe632b1a9 | 54 | if (minRange >= 2) |
kimnielsen | 0:d3dbe632b1a9 | 55 | minDistance = minRange; |
kimnielsen | 0:d3dbe632b1a9 | 56 | if (maxRange <= 400) |
kimnielsen | 0:d3dbe632b1a9 | 57 | maxDistance = maxRange; |
kimnielsen | 0:d3dbe632b1a9 | 58 | } |
kimnielsen | 0:d3dbe632b1a9 | 59 | } |
kimnielsen | 0:d3dbe632b1a9 | 60 | |
kimnielsen | 0:d3dbe632b1a9 | 61 | float HCSR04::getMinRange() { |
kimnielsen | 0:d3dbe632b1a9 | 62 | return minDistance; |
kimnielsen | 0:d3dbe632b1a9 | 63 | } |
kimnielsen | 0:d3dbe632b1a9 | 64 | |
kimnielsen | 0:d3dbe632b1a9 | 65 | float HCSR04::getMaxRange() { |
kimnielsen | 0:d3dbe632b1a9 | 66 | return maxDistance; |
kimnielsen | 0:d3dbe632b1a9 | 67 | } |