Library for US-015 (or HC-SR04) Ultrasonic Module Distance Measuring Sensors

US-015.h

Committer:
igbt6
Date:
2016-01-13
Revision:
0:7163b97ee5f1

File content as of revision 0:7163b97ee5f1:

/*
  @file US-015.h
  
  @brief library for US-015 (or HC-SR04) Ultrasonic Module Distance Measuring Sensor

  @Author lukasz uszko(luszko@op.pl)

  Tested on most mbed platforms
  
  Copyright (c) 2016 lukasz uszko
  Released under the MIT License (see http://mbed.org/license/mit)

  Documentation regarding the US-015 sensor can be found here: 
  http://www.micropik.com/PDF/HCSR04.pdf
*/
//DEMO - HOW TO USE:
/*
---------------------------------------- DEMO 1:----------------------------------------
#include <mbed.h>
#include "US-015.h"
 
 
#define TRIGGER_PIN PC_1
#define ECHO_PIN PC_0
Serial debugPort(SERIAL_TX, SERIAL_RX); //Default 9600 bauds, 8-bit data, no parity
 
void measurementFinished(int resultVal){
   debugPort.printf("Distance: %d",resultVal);
}
int main()
{
    
    US015 us015(TRIGGER_PIN,ECHO_PIN,US015::convertMaxDistanceToMaxTimeout(MAX_DISTANCE_FOR_US015_SENSOR_CM) );
    us015.setFinishCallback(measurementFinished);
    bool timeoutFlag=true;
    while (1) {
        wait_ms(1000);  
        us015.doMeasurement();
        while(us015.getTimePassedValue()<us015.getTimeoutValue())
        {
            if(us015.isMeasurementRuning())
            {
                timeoutFlag=true;
            }
            else
            {
                timeoutFlag =false;
                break;
            }
        }  
        if(timeoutFlag){
            debugPort.printf("Timeout Happened");
            us015.resetMeasuremnt();
        }
        
    }
}
*/



#include <mbed.h>

#define DEFAULT_TIMEOUT 0xFFFFFFFF
#define MAX_DISTANCE_FOR_US015_SENSOR_CM  400  //400cm
#define SPEED_OF_SOUND 343.2f
class US015{
    
public:

    struct TimeController {
        Timer timer;
        int startTime;
        int difTime;
    };
    
    US015(PinName triggerPin, PinName echoPin,uint32_t timeout=DEFAULT_TIMEOUT);
    static int convertMaxDistanceToMaxTimeout(int maxDistHandledBySensorInCm);
    bool doMeasurement(void);    
    int convertTimeToDistanceValue_mm(int timeUs);
    int convertTimeToDistanceValue_cm(int timeUs);
    void setFinishCallback(void (*finishCallback)(int resultValue));
    bool isMeasurementRuning(void );
    int getTimePassedValue(void);
    int getTimeoutValue(void);
    void resetMeasuremnt(void);

private:    
    void startMeasureCallback(void);
    void stopMeasureCallback(void);
    void (*measuremntFinishedCallback)(int result);
    
private:
    bool measurementRunning;
    DigitalOut trigger;
    InterruptIn echoIn;
    uint32_t timeoutValue;
    struct TimeController* timerCtrl;
    
};