Class to read range measurements from a MaxBotix MaxSonar ranging device.

Dependents:   BETAGO CleaningMachine_Betago clean_V1 CleaningM-Palm ... more

Committer:
mkanli
Date:
Tue Dec 14 12:13:42 2010 +0000
Revision:
1:b439ab68c8d9
Parent:
0:18790852a055
Some comment fixes.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mkanli 0:18790852a055 1 /**
mkanli 0:18790852a055 2 * @file MaxSonar.h
mkanli 0:18790852a055 3 * @section LICENSE
mkanli 0:18790852a055 4 * Copyright (c) 2010 Mustafa Ozgur Kanli.
mkanli 0:18790852a055 5 *
mkanli 0:18790852a055 6 * Permission is hereby granted, free of charge, to any person obtaining a copy
mkanli 0:18790852a055 7 * of this software and associated documentation files (the "Software"),to deal
mkanli 0:18790852a055 8 * in the Software without restriction, including without limitation the rights
mkanli 0:18790852a055 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
mkanli 0:18790852a055 10 * copies of the Software, and to permit persons to whom the Software is
mkanli 0:18790852a055 11 * furnished to do so, subject to the following conditions:
mkanli 0:18790852a055 12 *
mkanli 0:18790852a055 13 * The above copyright notice and this permission notice shall be included in
mkanli 0:18790852a055 14 * all copies or substantial portions of the Software.
mkanli 0:18790852a055 15 *
mkanli 0:18790852a055 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
mkanli 0:18790852a055 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
mkanli 0:18790852a055 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
mkanli 0:18790852a055 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
mkanli 0:18790852a055 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
mkanli 0:18790852a055 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
mkanli 0:18790852a055 22 * THE SOFTWARE.
mkanli 0:18790852a055 23 *
mkanli 0:18790852a055 24 * @section Description
mkanli 0:18790852a055 25 * This class provides an object to obtain range measurements from a
mkanli 0:18790852a055 26 * Maxbotix MaxSonar ultrasonic range finder.
mkanli 0:18790852a055 27 *
mkanli 0:18790852a055 28 * Supported devices:
mkanli 0:18790852a055 29 * 1) LV-MaxSonar: -EZ0 MB1000, -EZ1 MB1010, -EZ2 MB1020,
mkanli 0:18790852a055 30 * -EZ3 MB1030, -EZ4 MB1040
mkanli 0:18790852a055 31 *
mkanli 0:18790852a055 32 * Supported modes:
mkanli 0:18790852a055 33 * 1) Analog.
mkanli 0:18790852a055 34 */
mkanli 0:18790852a055 35 #ifndef MAXSONAR_H_
mkanli 0:18790852a055 36 #define MAXSONAR_H_
mkanli 0:18790852a055 37
mkanli 0:18790852a055 38 #include "mbed.h"
mkanli 0:18790852a055 39
mkanli 0:18790852a055 40 //! Define types of MaxSonar devices.
mkanli 0:18790852a055 41 enum MSType {
mkanli 1:b439ab68c8d9 42 MS_LV = 0, //!< Supported.
mkanli 0:18790852a055 43 MS_WR, //!< Not supported yet.
mkanli 0:18790852a055 44 MS_WRC, //!< Not supported yet.
mkanli 0:18790852a055 45 MS_XL, //!< Not supported yet.
mkanli 0:18790852a055 46 MS_XL_AE //!< Not supported yet.
mkanli 0:18790852a055 47 };
mkanli 0:18790852a055 48
mkanli 0:18790852a055 49 //! Define units for returning range.
mkanli 0:18790852a055 50 enum MSUnits {
mkanli 0:18790852a055 51 MS_CM = 0, //!< centimeters.
mkanli 0:18790852a055 52 MS_INCH //!< inches.
mkanli 0:18790852a055 53 };
mkanli 0:18790852a055 54
mkanli 0:18790852a055 55 //! Define access mode for obtaining range measurement.
mkanli 0:18790852a055 56 enum MSMode {
mkanli 1:b439ab68c8d9 57 MS_ANALOG = 0, //!< Supported.
mkanli 0:18790852a055 58 MS_SERIAL, //!< Not supported yet.
mkanli 0:18790852a055 59 MS_PWM //!< Not supported yet.
mkanli 0:18790852a055 60 };
mkanli 0:18790852a055 61
mkanli 0:18790852a055 62 /**
mkanli 0:18790852a055 63 * Class to read range measurements from MaxBotix MaxSonar
mkanli 0:18790852a055 64 * range-finder devices.
mkanli 0:18790852a055 65 *
mkanli 0:18790852a055 66 * Example
mkanli 0:18790852a055 67 * @code
mkanli 0:18790852a055 68 * #include "mbed.h"
mkanli 0:18790852a055 69 * #include "MaxSonar.h"
mkanli 0:18790852a055 70 *
mkanli 0:18790852a055 71 * int main() {
mkanli 0:18790852a055 72 * MaxSonar *range;
mkanli 0:18790852a055 73 * float r;
mkanli 0:18790852a055 74 *
mkanli 0:18790852a055 75 * // Create and configure object for 3.3V powered LV-series device,
mkanli 0:18790852a055 76 * // accessed with analog reads (in cm) on p16, triggered by p7.
mkanli 0:18790852a055 77 * range = new MaxSonar(MS_LV, MS_ANALOG, p7, p16);
mkanli 0:18790852a055 78 * range->setVoltage(3.3);
mkanli 0:18790852a055 79 * range->setUnits(MS_CM);
mkanli 0:18790852a055 80 *
mkanli 0:18790852a055 81 * while(1) {
mkanli 0:18790852a055 82 * // Trigger read, wait 49ms until ranger finder has
mkanli 0:18790852a055 83 * // finished, then read.
mkanli 0:18790852a055 84 * range->triggerRead();
mkanli 0:18790852a055 85 * wait_ms(49);
mkanli 0:18790852a055 86 * r = range->read();
mkanli 0:18790852a055 87 *
mkanli 0:18790852a055 88 * // Print and delay 0.5s.
mkanli 0:18790852a055 89 * printf("Range: %.3f cm\n", r);
mkanli 0:18790852a055 90 * wait(0.5);
mkanli 0:18790852a055 91 * }
mkanli 1:b439ab68c8d9 92 * }
mkanli 0:18790852a055 93 * @endcode
mkanli 0:18790852a055 94 */
mkanli 0:18790852a055 95 class MaxSonar {
mkanli 0:18790852a055 96
mkanli 0:18790852a055 97 private:
mkanli 0:18790852a055 98 enum MSType type; //!< Device type.
mkanli 0:18790852a055 99 enum MSMode mode; //!< Range reading mode.
mkanli 0:18790852a055 100 enum MSUnits units; //!< Range units.
mkanli 0:18790852a055 101 float voltage; //!< Supply/reference voltage (V).
mkanli 0:18790852a055 102 int analog_scale; //!< resolution = voltage/scale.
mkanli 0:18790852a055 103 float analog_resolution; //!< V/inch to compute range.
mkanli 0:18790852a055 104 AnalogIn *ain; //!< For analog reads.
mkanli 0:18790852a055 105 DigitalOut *rx_req; //!< For triggered reads (PWM or AIN).
mkanli 0:18790852a055 106
mkanli 0:18790852a055 107 public:
mkanli 0:18790852a055 108 /**
mkanli 0:18790852a055 109 * Constructor.
mkanli 0:18790852a055 110 *
mkanli 0:18790852a055 111 * @param type The type of device.
mkanli 0:18790852a055 112 * @param mode The access mode.
mkanli 0:18790852a055 113 * @param pin1 MS_ANALOG: Pin connected to RX of device.
mkanli 0:18790852a055 114 * MS_SERIAL: Pin connected to RX of device.
mkanli 0:18790852a055 115 * MS_PWM: Pin connected to RX of device.
mkanli 0:18790852a055 116 * @param pin2 MS_ANALOG: Pin connected to AN of device.
mkanli 0:18790852a055 117 * MS_SERIAL: Pin connected to TX of device.
mkanli 0:18790852a055 118 * MS_PWM: Pin connected to PW of device.
mkanli 0:18790852a055 119 * @note pin1 may be NC if only continuous reading is desired
mkanli 0:18790852a055 120 * when in analog or pwm mode.
mkanli 0:18790852a055 121 * @note Default units are in cm (MS_CM).
mkanli 0:18790852a055 122 */
mkanli 0:18790852a055 123 MaxSonar(enum MSType type, enum MSMode mode,
mkanli 0:18790852a055 124 PinName pin1, PinName pin2);
mkanli 0:18790852a055 125
mkanli 0:18790852a055 126 /**
mkanli 0:18790852a055 127 * Destructor.
mkanli 0:18790852a055 128 */
mkanli 0:18790852a055 129 ~MaxSonar(void);
mkanli 0:18790852a055 130
mkanli 0:18790852a055 131 /**
mkanli 0:18790852a055 132 * Set the units for reading range value. Default cm (MS_CM).
mkanli 0:18790852a055 133 *
mkanli 0:18790852a055 134 * @param units The specified units option.
mkanli 0:18790852a055 135 */
mkanli 0:18790852a055 136 void setUnits(enum MSUnits units);
mkanli 0:18790852a055 137
mkanli 0:18790852a055 138 /**
mkanli 0:18790852a055 139 * Specify the supply voltage used by the device.
mkanli 0:18790852a055 140 *
mkanli 0:18790852a055 141 * @param voltage The specified voltage (default 3.3)
mkanli 0:18790852a055 142 *
mkanli 0:18790852a055 143 * @note This is important for correct conversion of the voltage
mkanli 0:18790852a055 144 * from pin AN of device into the range value.
mkanli 0:18790852a055 145 */
mkanli 0:18790852a055 146 void setVoltage(float voltage);
mkanli 0:18790852a055 147
mkanli 0:18790852a055 148 /**
mkanli 0:18790852a055 149 * Trigger a reading of range. The reading will be ready 49 ms
mkanli 0:18790852a055 150 * after the trigger, accessable by the read() function.
mkanli 0:18790852a055 151 *
mkanli 0:18790852a055 152 * @param none
mkanli 0:18790852a055 153 *
mkanli 0:18790852a055 154 * @note Triggered reading is only possible if a pin connected to
mkanli 0:18790852a055 155 * RX of the device was specified when calling the constructor.
mkanli 0:18790852a055 156 */
mkanli 0:18790852a055 157 void triggerRead(void);
mkanli 0:18790852a055 158
mkanli 0:18790852a055 159 /**
mkanli 0:18790852a055 160 * Read range value.
mkanli 0:18790852a055 161 *
mkanli 0:18790852a055 162 * @return Range value in the set units (default cm).
mkanli 0:18790852a055 163 */
mkanli 0:18790852a055 164 float read(void);
mkanli 0:18790852a055 165 };
mkanli 0:18790852a055 166
mkanli 0:18790852a055 167 #endif