나중에 급하게 PID 알고리즘을 적용해 짜본 코드... 시간이 충분치 않아서 그냥 원래 있던 코드를 수정해서 하기로 했기에 버려진 코드지만, 교수님께 참고용으로 Publish를 했다.
Dependencies: mbed Adafruit_GFX
Ultrasonic.cpp
- Committer:
- 21400688
- Date:
- 2019-06-15
- Revision:
- 0:c4c874d702f9
File content as of revision 0:c4c874d702f9:
#include "Ultrasonic.h" Ultrasonic::Ultrasonic(PinName trigPin, PinName echoPin, float tick, bool repeat) : _trig(trigPin), _echo(echoPin), _toVal(tick), _repeat(repeat) { _done = 0; _timer.reset(); _echo.rise(this, &Ultrasonic::_startT); _echo.fall(this, &Ultrasonic::_endT); if (_repeat) _ticker.attach(this, &Ultrasonic::_ticker_cb, _toVal); } Ultrasonic::~Ultrasonic() {} void Ultrasonic::_startT(void) { _timer.start(); } void Ultrasonic::_endT(void) { _timer.stop(); _pulseDuration = _timer.read_us(); _distance = _pulseDuration / 58; _timer.reset(); _done = 1; } void Ultrasonic::trig() { _echo.enable_irq(); wait_us(2); _trig = 1; wait_us(10); _trig = 0; } void Ultrasonic::_ticker_cb(void) { this->trig(); } int Ultrasonic::getDistance(void) { return _distance; } int Ultrasonic::getPulseDuration(void) { return _pulseDuration; } void Ultrasonic::pauseMeasure(void) { _repeat = false; _ticker.detach(); } void Ultrasonic::setMode(bool mode) { _repeat = mode; if (_repeat) _ticker.attach(this, &Ultrasonic::_ticker_cb, _toVal); else _ticker.detach(); } int Ultrasonic::getStatus() { return _done; } void Ultrasonic::clearStatus(void) { _done = 0; }