Mangirdas Skripka / HC_SR04_Ultrasonic_Library

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