Grundfunktionen für Micromouse
Dependencies: AutomationElements mbed
UltrasonicSensor/HCSR04.cpp
- Committer:
- wengefa1
- Date:
- 2018-04-22
- Revision:
- 1:4808f55970e8
- Parent:
- 0:e38b500d6e74
File content as of revision 1:4808f55970e8:
#include "mbed.h" #include "HCSR04.h" float sampleTime = 0.05f;//Ehemals 0.5 HCSR04::HCSR04(InterruptIn& echo, DigitalOut& trigger) : echo(echo), trigger(trigger) { ticker_sens.attach(callback(this, &HCSR04::startMeasurement), sampleTime); init(); //ticker.attach(callback(this, &Controller::run), PERIOD); } HCSR04::~HCSR04() { ticker_sens.detach(); // Stoppt den periodischen Task } void HCSR04::init() { distance = -1; // initial distance minDistance = 2; maxDistance = 400; newDataReady = timerStarted = false; } void HCSR04::startTimer() { if (!timerStarted) { timer.start(); // start the timer timerStarted = true; echoTimeout.attach_us(this, &HCSR04::stopTimer, 25000); // in case echo fall does not occur echo.fall(this, &HCSR04::stopTimer); echo.rise(NULL); } } void HCSR04::stopTimer() { timer.stop(); // stop the timer if (timerStarted) { distance = timer.read() * 1e6 / 58; if (distance < minDistance) distance = minDistance; if (distance > maxDistance) distance = maxDistance; newDataReady = true; } timer.reset(); timerStarted = false; echoTimeout.detach(); echo.fall(NULL); } void HCSR04::turnOffTrigger() { trigger = 0; } void HCSR04::startMeasurement() { trigger = 1; triggerTimeout.attach_us(this, &HCSR04::turnOffTrigger, 10);//Ehemals 10 echo.rise(this, &HCSR04::startTimer); newDataReady = false; } float HCSR04::getDistance_cm() { newDataReady = false; return distance; } float HCSR04::getDistance_mm() { newDataReady = false; return distance * 10; } bool HCSR04::isNewDataReady() { return newDataReady; } void HCSR04::setRanges(float minRange, float maxRange) { if (minRange < maxRange) { if (minRange >= 2 && minRange < 400) // bug from revs. 4 and 5 corrected minDistance = minRange; if (maxRange <= 400) maxDistance = maxRange; } } float HCSR04::getMinRange() { return minDistance; } float HCSR04::getMaxRange() { return maxDistance; }