Kildekode til robot

Dependencies:   mbed

Fork of PRO1 by E2016-S1-Team5

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?

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