Sonar
angledSonar.cpp
- Committer:
- twjfransen
- Date:
- 2018-06-13
- Revision:
- 0:932004bfb013
File content as of revision 0:932004bfb013:
#include "angledSonar.h" Sonar::Sonar(PinName trig, PinName echo, float angle_z, float x, float y, float z) :_trig(trig) ,_echo(echo) ,_x(x) ,_y(y) ,_z(z) { _timer.start(); _echo.rise(callback(this, &Sonar::echoBegin)); _echo.fall(callback(this, &Sonar::echoEnd)); _pinged = false; _ratio_x = -sin(angle_z); _ratio_y = cos(angle_z); } void Sonar::echoBegin() { _timer.reset(); _begin = _timer.read_us();} void Sonar::echoEnd() { _end = _timer.read_us(); _distance = (_end - _begin)/58.3; _pinged = true; } float Sonar::getDistance() { _trig = 1; wait_us(10); _trig = 0; while(!_pinged){printf("");} _pinged = false; return _distance; } void Sonar::pulse() { _trig = 1; wait_us(10); _trig = 0; } void Sonar::autoPulse(bool on_off, float frequency_ms /*=1*/) { if (on_off) { _ticker.attach(callback(this, &Sonar::pulse), frequency_ms/1000); } else { _ticker.detach(); } } Point Sonar::getCoordinate() { float distance = getDistance(); Point newPoint; newPoint.x = distance * _ratio_x + _x; newPoint.y = distance * _ratio_y + _y; return newPoint; }