Grundfunktionen für Micromouse

Dependencies:   AutomationElements mbed

Committer:
wengefa1
Date:
Sun Apr 22 09:55:40 2018 +0000
Revision:
1:4808f55970e8
Parent:
0:e38b500d6e74
Grundfunktionen funktionieren

Who changed what in which revision?

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