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