changed range conditions
Fork of HCSR04 by
Diff: HCSR04.h
- Revision:
- 0:5461d44a187c
- Child:
- 2:3ebde19131af
diff -r 000000000000 -r 5461d44a187c HCSR04.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HCSR04.h Sun Nov 24 21:45:46 2013 +0000 @@ -0,0 +1,72 @@ +/* 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__ */