Updated version of the library to deal with the constructor without onUpdate callback function.

Fork of HC_SR04_Ultrasonic_Library by EJ Teb

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ultrasonic.cpp Source File

ultrasonic.cpp

00001  #include "ultrasonic.h"
00002     
00003     ultrasonic::ultrasonic(PinName trigPin, PinName echoPin, float updateSpeed, float timeout):_trig(trigPin), _echo(echoPin)
00004     {
00005         _onUpdateMethod=NULL;
00006         _updateSpeed = updateSpeed;
00007         _timeout = timeout;
00008         _t.start ();
00009     }
00010     
00011     ultrasonic::ultrasonic(PinName trigPin, PinName echoPin, float updateSpeed, float timeout, void onUpdate(int))
00012     :_trig(trigPin), _echo(echoPin)
00013     {
00014         _onUpdateMethod=onUpdate;
00015         _updateSpeed = updateSpeed;
00016         _timeout = timeout;
00017         _t.start ();
00018     }
00019     void ultrasonic::_startT()
00020     { 
00021         if(_t.read()>600)
00022         {
00023             _t.reset ();
00024         }
00025         start = _t.read_us ();
00026     }
00027         
00028     void ultrasonic::_updateDist()
00029     {
00030         end = _t.read_us ();
00031         done = 1;
00032         _distance = (end - start)/6;       
00033         _tout.detach();
00034         _tout.attach(this,&ultrasonic::_startTrig, _updateSpeed);   
00035     }
00036     void ultrasonic::_startTrig(void)
00037     {
00038             _tout.detach();
00039             _trig=1;             
00040             wait_us(10);        
00041             done = 0;            
00042             _echo.rise(this,&ultrasonic::_startT);   
00043             _echo.fall(this,&ultrasonic::_updateDist);
00044             _echo.enable_irq ();
00045             _tout.attach(this,&ultrasonic::_startTrig,_timeout);
00046             _trig=0;                     
00047     }
00048     
00049     int ultrasonic::getCurrentDistance(void)
00050     {
00051         return _distance;
00052     }
00053     void ultrasonic::pauseUpdates(void)
00054     {
00055         _tout.detach();
00056         _echo.rise(NULL);
00057         _echo.fall(NULL);
00058     }
00059     void ultrasonic::startUpdates(void)
00060     {
00061         _startTrig();
00062     }
00063     void ultrasonic::attachOnUpdate(void method(int))
00064     {
00065         _onUpdateMethod = method;
00066     }
00067     void ultrasonic::changeUpdateSpeed(float updateSpeed)
00068     {
00069         _updateSpeed = updateSpeed;
00070     }
00071     float ultrasonic::getUpdateSpeed()
00072     {
00073         return _updateSpeed;
00074     }
00075     int ultrasonic::isUpdated(void)
00076     {
00077         //printf("%d", done);
00078         d=done;
00079         done = 0;
00080         return d;
00081     }
00082     void ultrasonic::checkDistance(void)
00083     {
00084         if(isUpdated())
00085         {
00086             if (_onUpdateMethod) (*_onUpdateMethod)(_distance);
00087         }
00088     }