Works with interrupts
Dependents: Nucleo_UltrasonicHelloWorld Proj Nucleo_UltrasonicHelloWorld mbedTurtleCar ... more
ultrasonic.cpp
- Committer:
- ejteb
- Date:
- 2014-11-23
- Revision:
- 0:6aa04a8c8d4c
- Child:
- 2:cc1143d36567
File content as of revision 0:6aa04a8c8d4c:
#include "ultrasonic.h" ultrasonic::ultrasonic(PinName trigPin, PinName echoPin, float updateSpeed, float timeout):_trig(trigPin), _echo(echoPin) { printf("ultrasonic (wo methods)\r\n"); _updateSpeed = updateSpeed; _timeout = timeout; } ultrasonic::ultrasonic(PinName trigPin, PinName echoPin, float updateSpeed, float timeout, void onUpdate(int), void onTrig(void),void onStartTimer(void)/*, Timer *t*/ ) :_trig(trigPin), _echo(echoPin) { printf("ultrasonic(with methods)\r\n"); _onUpdateMethod=onUpdate; _onTriggerMethod=onTrig; _onStartTimerMethod=onStartTimer; _updateSpeed = updateSpeed; _timeout = timeout; _t.start (); //_ticker.attach_us(this,&ultrasonic::ticktock, 10); //_t = t; } void ultrasonic::_startT(){ //_t.reset (); start = _t.read_us (); // _t.start(); (*_onStartTimerMethod)(); // printf("_startT %d\r\n", tickcount); return; } void ultrasonic::_updateDist() { end = _t.read_us (); done = 1; //_t.stop(); // printf("_t.read_us()=%d\r\n", _t.read_us()); // printf("_t.read() = %f\r\n", _t.read()); // printf("_t.read_us()=%d\r\n", _t.read_us()); // printf("_t.read() = %f\r\n", _t.read()); _distance = (end - start)/6; //_t.reset(); _tout.detach(); _tout.attach(this,&ultrasonic::_startTrig, _updateSpeed); (*_onUpdateMethod)(_distance); } void ultrasonic::_startTrig(void) { _tout.detach(); //printf("_startTrig\r\n"); _trig=1; wait_us(10); done = 0; _echo.rise(this,&ultrasonic::_startT); _echo.fall(this,&ultrasonic::_updateDist); _echo.enable_irq (); _tout.attach(this,&ultrasonic::_startTrig,_timeout); _trig=0; } int ultrasonic::getCurrentDistance(void) { //printf("getCurrDistance\r\n"); return _distance; } void ultrasonic::pauseUpdates(void) { //printf("pauseUpdates\r\n"); _tout.detach(); _echo.rise(NULL); _echo.fall(NULL); } void ultrasonic::startUpdates(void) { //printf("startUpdates\r\n"); _startTrig(); /* while (1) { while (done == 0) { } // printf("_updateDist- t=%f, %d\r\n", _t.read(), start); // printf("_updateDist- t=%d, %d\r\n", end, start); printf("_updateDist- dist=%d\r\n", _distance); }*/ } void ultrasonic::attachOnUpdate(void method(int)) { _onUpdateMethod = method; } void ultrasonic::attachOnTrigger(void method(void)) { _onTriggerMethod = method; } void ultrasonic::attachOnStartTimer(void method(void)) { _onStartTimerMethod = method; } void ultrasonic::changeUpdateSpeed(float updateSpeed) { _updateSpeed = updateSpeed; } float ultrasonic::getUpdateSpeed() { return _updateSpeed; } /*void ultrasonic::ticktock(void) { tickcount += 1; }*/ int ultrasonic::isUpdated(void) { d=done; done = 0; return d; }