Library for using HC-SR04 with some API Documentation added

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