aa
Ultrasonic.cpp
- Committer:
- taeyeobyeo
- Date:
- 2019-06-12
- Revision:
- 0:6269b1b47590
File content as of revision 0:6269b1b47590:
#include "Ultrasonic.h" /* Constructor& Destructor * trigPin - attach ultrasonic wave trig pin (or shooting pin) * echoPin - attach ultrasonic wave echo pin (or reading pin) * tick - float value for repeat mode, default is 0.1. * repeat - if true, ultrasonic wave will be triggered and received at every *tick second. */ 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(){} /*receive echo of ultrasonic wave*/ void Ultrasonic::_startT(void){ _timer.start(); } void Ultrasonic::_endT(void){ _timer.stop(); _pulseDuration = _timer.read_us(); _distance = _pulseDuration/58; _timer.reset(); _done = 1; } /*shoots ultrasonic wave*/ void Ultrasonic::trig(){ _echo.enable_irq(); wait_us(2); _trig = 1; wait_us(10); _trig = 0; } /** The Callback function for ticker * Enabled on repeat mode * _ticker_cb is triggered every _toVal second. */ void Ultrasonic::_ticker_cb(void){ this->trig(); } /** getter methods */ int Ultrasonic::getDistance(void){ return _distance; } int Ultrasonic::getPulseDuration(void){ return _pulseDuration; } int Ultrasonic::getStatus(){ return _done; } /** setter Methods * clearStatus clears _done variable. this method should be called by user to acknowledge the library that user read the value * pauseMeasure is useful only when _repeat is true, it turns the _repeat to false * setMode is a method to manipulate _repeat to true or false * setTick method can change every time of each term in repeat mode */ void Ultrasonic::clearStatus(void){ _done = 0; _distance = 0; _pulseDuration = 0; } 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(); } void Ultrasonic::setTick(float tick){ if(tick>0) _toVal = tick; else _toVal = -tick; }