mbed device driver for HC-SR04 ultrasonic range finder
Dependents: ROBot Ultrasonic Ksen Core1000_SmartFarm ... more
HCSR04.h
- Committer:
- rabad1
- Date:
- 2013-11-24
- Revision:
- 0:5461d44a187c
File content as of revision 0:5461d44a187c:
/* File: HCSR04.h
* Author: Robert Abad Copyright (c) 2013
*
* Desc: driver for HCSR04 Ultrasonic Range Finder. The returned range
* is in units of meters.
*
* To use this driver you must call the methods ::startMeas()
* and ::getMeas(). The HCSR04 requires a trigger time of
* 10 usec (microseconds) which is initiated by ::startMeas().
* If a successful measurement is made, getMeas() will return
* RANGE_MEAS_VALID. If unsuccessful, initiate a new measurement.
*
* The datasheet for this device can be found here:
* http://www.elecfreaks.com/store/download/product/Sensor/HC-SR04/HC-SR04_Ultrasonic_Module_User_Guide.pdf
*
* Below is some sample code:
*
* #include "mbed.h"
* #include "HCSR04.h"
*
* #define PIN_TRIGGER (p14)
* #define PIN_ECHO (p15)
*
* int main(void)
* {
* HCSR04 rangeFinder( PIN_TRIGGER, PIN_ECHO );
* float range;
*
* while (1)
* {
* rangeFinder.startMeas();
* wait(0.1);
* if ( rangeFinder.getMeas(range) == RANGE_MEAS_VALID )
* {
* printf("range = %f\n\r", range);
* }
* }
* }
*/
#ifndef __HCSR04_H__
#define __HCSR04_H__
#include "mbed.h"
typedef enum
{
RANGE_MEAS_INVALID,
RANGE_MEAS_VALID
} etHCSR04_RANGE_STATUS;
class HCSR04
{
public:
HCSR04( PinName pinTrigger, PinName pinEcho );
void startMeas(void);
etHCSR04_RANGE_STATUS getMeas(float &rRangeMeters);
private:
DigitalOut trigger;
Ticker triggerTicker;
InterruptIn echo;
Timer echoTimer;
unsigned long measTimeStart_us;
unsigned long measTimeStop_us;
void triggerTicker_cb(void); // trigger ticker callback function
void ISR_echoRising(void); // ISR for rising edge
void ISR_echoFalling(void); // ISR for falling edge
};
#endif /* __HCSR04_H__ */