Kildekode

Dependencies:   mbed

Fork of PRO1 by Kim Nielsen

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?

UserRevisionLine numberNew 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 }