Cameron Causer / 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     }
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         //Consider scaling this using integer ops (?
00031         _distance = (end - start)/148;       
00032         _tout.detach();
00033         _tout.attach(this,&ultrasonic::_startTrig, _updateSpeed);   
00034     }
00035     void ultrasonic::_startTrig(void)
00036     {
00037             _tout.detach();
00038             _trig=1;             
00039             wait_us(10);        
00040             done = 0;            
00041             _echo.rise(this,&ultrasonic::_startT);   
00042             _echo.fall(this,&ultrasonic::_updateDist);
00043             _echo.enable_irq ();
00044             _tout.attach(this,&ultrasonic::_startTrig,_timeout);
00045             _trig=0;                     
00046     }
00047     
00048     int ultrasonic::getCurrentDistance(void)
00049     {
00050         return _distance;
00051     }
00052     void ultrasonic::pauseUpdates(void)
00053     {
00054         _tout.detach();
00055         _echo.rise(NULL);
00056         _echo.fall(NULL);
00057     }
00058     void ultrasonic::startUpdates(void)
00059     {
00060         _startTrig();
00061     }
00062     void ultrasonic::attachOnUpdate(void method(int))
00063     {
00064         _onUpdateMethod = method;
00065     }
00066     void ultrasonic::changeUpdateSpeed(float updateSpeed)
00067     {
00068         _updateSpeed = updateSpeed;
00069     }
00070     float ultrasonic::getUpdateSpeed()
00071     {
00072         return _updateSpeed;
00073     }
00074     int ultrasonic::isUpdated(void)
00075     {
00076         //printf("%d", done);
00077         d=done;
00078         done = 0;
00079         return d;
00080     }
00081     void ultrasonic::checkDistance(void)
00082     {
00083         if(isUpdated())
00084         {
00085             (*_onUpdateMethod)(_distance);
00086         }
00087     }