Nucleo_SSD1306_DS1302_ESP8266_AM2320_BME280

Dependencies:   AM2320 AutomationElements BME280 DS1302 ESP8266 mbed

Committer:
dadangjia
Date:
Thu May 11 16:57:18 2017 +0000
Revision:
0:5f61200516d7
OK

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dadangjia 0:5f61200516d7 1 #ifndef HCSR04_H_TVZMT
dadangjia 0:5f61200516d7 2 #define HCSR04_H_TVZMT
dadangjia 0:5f61200516d7 3
dadangjia 0:5f61200516d7 4 /** A distance measurement class using ultrasonic sensor HC-SR04.
dadangjia 0:5f61200516d7 5 *
dadangjia 0:5f61200516d7 6 * Example of use:
dadangjia 0:5f61200516d7 7 * @code
dadangjia 0:5f61200516d7 8 * #include "mbed.h"
dadangjia 0:5f61200516d7 9 * #include "HCSR04.h"
dadangjia 0:5f61200516d7 10 *
dadangjia 0:5f61200516d7 11 * Serial pc(USBTX, USBRX);
dadangjia 0:5f61200516d7 12 * Timer timer;
dadangjia 0:5f61200516d7 13 *
dadangjia 0:5f61200516d7 14 * int main() {
dadangjia 0:5f61200516d7 15 * HCSR04 sensor(p5, p7);
dadangjia 0:5f61200516d7 16 * sensor.setRanges(10, 110);
dadangjia 0:5f61200516d7 17 * pc.printf("Min. range = %g cm\n\rMax. range = %g cm\n\r",
dadangjia 0:5f61200516d7 18 * sensor.getMinRange(), sensor.getMaxRange());
dadangjia 0:5f61200516d7 19 * while(true) {
dadangjia 0:5f61200516d7 20 * timer.reset();
dadangjia 0:5f61200516d7 21 * timer.start();
dadangjia 0:5f61200516d7 22 * sensor.startMeasurement();
dadangjia 0:5f61200516d7 23 * while(!sensor.isNewDataReady()) {
dadangjia 0:5f61200516d7 24 * // wait for new data
dadangjia 0:5f61200516d7 25 * // waiting time depends on the distance
dadangjia 0:5f61200516d7 26 * }
dadangjia 0:5f61200516d7 27 * pc.printf("Distance: %5.1f mm\r", sensor.getDistance_mm());
dadangjia 0:5f61200516d7 28 * timer.stop();
dadangjia 0:5f61200516d7 29 * wait_ms(500 - timer.read_ms()); // time the loop
dadangjia 0:5f61200516d7 30 * }
dadangjia 0:5f61200516d7 31 * }
dadangjia 0:5f61200516d7 32 * @endcode
dadangjia 0:5f61200516d7 33 */
dadangjia 0:5f61200516d7 34 class HCSR04 {
dadangjia 0:5f61200516d7 35
dadangjia 0:5f61200516d7 36 public:
dadangjia 0:5f61200516d7 37
dadangjia 0:5f61200516d7 38 /** Receives two PinName variables.
dadangjia 0:5f61200516d7 39 * @param echoPin mbed pin to which the echo signal is connected to
dadangjia 0:5f61200516d7 40 * @param triggerPin mbed pin to which the trigger signal is connected to
dadangjia 0:5f61200516d7 41 */
dadangjia 0:5f61200516d7 42 HCSR04(PinName echoPin, PinName triggerPin);
dadangjia 0:5f61200516d7 43
dadangjia 0:5f61200516d7 44 /** Start the measurement. Measurement time depends on the distance.
dadangjia 0:5f61200516d7 45 * Maximum measurement time is limited to 25 ms (400 cm).
dadangjia 0:5f61200516d7 46 */
dadangjia 0:5f61200516d7 47 void startMeasurement();
dadangjia 0:5f61200516d7 48
dadangjia 0:5f61200516d7 49 /** Returns the distance in cm. Requires previous call of startMeasurement().
dadangjia 0:5f61200516d7 50 * @returns distance of the measuring object in cm.
dadangjia 0:5f61200516d7 51 */
dadangjia 0:5f61200516d7 52 float getDistance_cm();
dadangjia 0:5f61200516d7 53
dadangjia 0:5f61200516d7 54 /** Returns the distance in mm. Requires previous call of startMeasurement().
dadangjia 0:5f61200516d7 55 * @returns distance of the measuring object in mm.
dadangjia 0:5f61200516d7 56 */
dadangjia 0:5f61200516d7 57 float getDistance_mm();
dadangjia 0:5f61200516d7 58
dadangjia 0:5f61200516d7 59 /** Sets the minimum and maximum ranges between the factory values of 2 cm and 400 cm.
dadangjia 0:5f61200516d7 60 * @param minRange Minimum range in cm. Must be between 2 cm and maxRange.
dadangjia 0:5f61200516d7 61 * @param maxRange Maximum range in cm. Must be between minRange and 400 cm.
dadangjia 0:5f61200516d7 62 */
dadangjia 0:5f61200516d7 63 void setRanges(float minRange, float maxRange);
dadangjia 0:5f61200516d7 64
dadangjia 0:5f61200516d7 65 /** Retreives the minimum sensor range set by the user.
dadangjia 0:5f61200516d7 66 * @returns the minimum sensor range set by the user in cm.
dadangjia 0:5f61200516d7 67 */
dadangjia 0:5f61200516d7 68 float getMinRange();
dadangjia 0:5f61200516d7 69
dadangjia 0:5f61200516d7 70 /** Retreives the maximum sensor range set by the user.
dadangjia 0:5f61200516d7 71 * @returns the maximum sensor range set by the user in cm.
dadangjia 0:5f61200516d7 72 */
dadangjia 0:5f61200516d7 73 float getMaxRange();
dadangjia 0:5f61200516d7 74
dadangjia 0:5f61200516d7 75 /** Checks if the new data is ready.
dadangjia 0:5f61200516d7 76 * @returns true if new data is ready, false otherwise.
dadangjia 0:5f61200516d7 77 */
dadangjia 0:5f61200516d7 78 bool isNewDataReady();
dadangjia 0:5f61200516d7 79
dadangjia 0:5f61200516d7 80 private:
dadangjia 0:5f61200516d7 81
dadangjia 0:5f61200516d7 82 InterruptIn echo; // echo pin
dadangjia 0:5f61200516d7 83 DigitalOut trigger; // trigger pin
dadangjia 0:5f61200516d7 84 Timer timer; // echo pulsewidth measurement
dadangjia 0:5f61200516d7 85 float distance; // store the distance in cm
dadangjia 0:5f61200516d7 86 float minDistance; // minimum measurable distance
dadangjia 0:5f61200516d7 87 float maxDistance; // maximum measurable distance
dadangjia 0:5f61200516d7 88 Timeout triggerTimeout, echoTimeout;
dadangjia 0:5f61200516d7 89 bool newDataReady, timerStarted;
dadangjia 0:5f61200516d7 90
dadangjia 0:5f61200516d7 91 /** Start the timer. */
dadangjia 0:5f61200516d7 92 void startTimer();
dadangjia 0:5f61200516d7 93
dadangjia 0:5f61200516d7 94 /** Stop the timer. */
dadangjia 0:5f61200516d7 95 void stopTimer();
dadangjia 0:5f61200516d7 96
dadangjia 0:5f61200516d7 97 /** Initialization. */
dadangjia 0:5f61200516d7 98 void init();
dadangjia 0:5f61200516d7 99
dadangjia 0:5f61200516d7 100 void turnOffTrigger();
dadangjia 0:5f61200516d7 101 };
dadangjia 0:5f61200516d7 102
dadangjia 0:5f61200516d7 103 #endif