Library for interfacing the SRF08 ultrasonic range sensor. Most functions of the SRF08 are covered, including interrupt-based waiting for the ranging process to finish

Dependents:   Project6

Fork of SRF08 by Brent Dekker

Committer:
brentdekker
Date:
Tue Jul 10 08:48:02 2012 +0000
Revision:
1:76fb116fa28d
Parent:
0:4e0a8193b92e
Child:
2:ca82f89f415d
Extra functions added for more optimal processor-time use

Who changed what in which revision?

UserRevisionLine numberNew contents of line
brentdekker 0:4e0a8193b92e 1
brentdekker 0:4e0a8193b92e 2 /*
brentdekker 0:4e0a8193b92e 3 Copyright (c) 2010 Chris Styles (chris dot styles at mbed dot org)
brentdekker 0:4e0a8193b92e 4
brentdekker 0:4e0a8193b92e 5 Permission is hereby granted, free of charge, to any person obtaining a copy
brentdekker 0:4e0a8193b92e 6 of this software and associated documentation files (the "Software"), to deal
brentdekker 0:4e0a8193b92e 7 in the Software without restriction, including without limitation the rights
brentdekker 0:4e0a8193b92e 8 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
brentdekker 0:4e0a8193b92e 9 copies of the Software, and to permit persons to whom the Software is
brentdekker 0:4e0a8193b92e 10 furnished to do so, subject to the following conditions:
brentdekker 0:4e0a8193b92e 11
brentdekker 0:4e0a8193b92e 12 The above copyright notice and this permission notice shall be included in
brentdekker 0:4e0a8193b92e 13 all copies or substantial portions of the Software.
brentdekker 0:4e0a8193b92e 14
brentdekker 0:4e0a8193b92e 15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
brentdekker 0:4e0a8193b92e 16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
brentdekker 0:4e0a8193b92e 17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
brentdekker 0:4e0a8193b92e 18 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
brentdekker 0:4e0a8193b92e 19 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
brentdekker 0:4e0a8193b92e 20 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
brentdekker 0:4e0a8193b92e 21 THE SOFTWARE.
brentdekker 0:4e0a8193b92e 22 */
brentdekker 0:4e0a8193b92e 23
brentdekker 0:4e0a8193b92e 24 #ifndef SRF08_H
brentdekker 0:4e0a8193b92e 25 #define SRF08_H
brentdekker 0:4e0a8193b92e 26
brentdekker 0:4e0a8193b92e 27 #include "mbed.h"
brentdekker 0:4e0a8193b92e 28
brentdekker 1:76fb116fa28d 29 #define RANGEBUFSIZE 5
brentdekker 1:76fb116fa28d 30
brentdekker 0:4e0a8193b92e 31 /*
brentdekker 0:4e0a8193b92e 32 * The SRF08 is an Ultrasonic range finder, with an I2C interface that allows the measurement to be read directly in centimetres
brentdekker 0:4e0a8193b92e 33 */
brentdekker 0:4e0a8193b92e 34 class SRF08 {
brentdekker 0:4e0a8193b92e 35
brentdekker 0:4e0a8193b92e 36 public:
brentdekker 0:4e0a8193b92e 37
brentdekker 0:4e0a8193b92e 38 /*
brentdekker 0:4e0a8193b92e 39 * Constructor: SRF08
brentdekker 0:4e0a8193b92e 40 * Args: PinName sda: Data pin of I2C bus to which module is connected
brentdekker 0:4e0a8193b92e 41 * PinName scl: Clock pin of I2C bus to which module is connected
brentdekker 0:4e0a8193b92e 42 * int addr: address of module on the I2C bus
brentdekker 0:4e0a8193b92e 43 * Returns: void
brentdekker 0:4e0a8193b92e 44 * Description: Creates an instance of the SRF08 to communicate with a sRF08 module
brentdekker 0:4e0a8193b92e 45 */
brentdekker 0:4e0a8193b92e 46 SRF08(PinName sda, PinName scl, int addr);
brentdekker 0:4e0a8193b92e 47
brentdekker 0:4e0a8193b92e 48 /*
brentdekker 0:4e0a8193b92e 49 * Destructor: ~SRF08
brentdekker 0:4e0a8193b92e 50 * Args: void
brentdekker 0:4e0a8193b92e 51 * Returns: void
brentdekker 0:4e0a8193b92e 52 * Description: Destroys instance of SRF08 class
brentdekker 0:4e0a8193b92e 53 */
brentdekker 0:4e0a8193b92e 54 ~SRF08();
brentdekker 1:76fb116fa28d 55
brentdekker 1:76fb116fa28d 56 /*
brentdekker 1:76fb116fa28d 57 * Function: startRanging
brentdekker 1:76fb116fa28d 58 * Args: void
brentdekker 1:76fb116fa28d 59 * Returns: void
brentdekker 1:76fb116fa28d 60 * Description: Sends command to module to start ranging.
brentdekker 1:76fb116fa28d 61 */
brentdekker 1:76fb116fa28d 62 void startRanging();
brentdekker 1:76fb116fa28d 63
brentdekker 1:76fb116fa28d 64 /*
brentdekker 1:76fb116fa28d 65 * Function: rangingFinished
brentdekker 1:76fb116fa28d 66 * Args: void
brentdekker 1:76fb116fa28d 67 * Returns: Bool: whether ranging is finished
brentdekker 1:76fb116fa28d 68 * Description: Checks if the ranging process on the module is finished
brentdekker 1:76fb116fa28d 69 */
brentdekker 1:76fb116fa28d 70 bool rangingFinished();
brentdekker 1:76fb116fa28d 71
brentdekker 1:76fb116fa28d 72 /*
brentdekker 1:76fb116fa28d 73 * Function: getRange
brentdekker 1:76fb116fa28d 74 * Args: void
brentdekker 1:76fb116fa28d 75 * Returns: int range
brentdekker 1:76fb116fa28d 76 * Description: Range in cm. This function should only be called when ranging is finished, otherwise previous value is returned
brentdekker 1:76fb116fa28d 77 */
brentdekker 1:76fb116fa28d 78 void getRange();
brentdekker 1:76fb116fa28d 79
brentdekker 0:4e0a8193b92e 80 /*
brentdekker 0:4e0a8193b92e 81 * Function: readRange
brentdekker 0:4e0a8193b92e 82 * Args: void
brentdekker 0:4e0a8193b92e 83 * Returns: int range
brentdekker 0:4e0a8193b92e 84 * Description: Reads the range register and converts it to a usable value
brentdekker 0:4e0a8193b92e 85 */
brentdekker 1:76fb116fa28d 86 int readRange();
brentdekker 1:76fb116fa28d 87
brentdekker 1:76fb116fa28d 88 /*
brentdekker 1:76fb116fa28d 89 * Function: readBufRange
brentdekker 1:76fb116fa28d 90 * Args: void
brentdekker 1:76fb116fa28d 91 * Returns: int range
brentdekker 1:76fb116fa28d 92 * Description: Reads the range register, adds it to an array and converts it to a filtered value
brentdekker 1:76fb116fa28d 93 */
brentdekker 1:76fb116fa28d 94 //int readBufRange();
brentdekker 0:4e0a8193b92e 95
brentdekker 0:4e0a8193b92e 96 /*
brentdekker 0:4e0a8193b92e 97 * Function: readLightIntensity
brentdekker 0:4e0a8193b92e 98 * Args: void
brentdekker 0:4e0a8193b92e 99 * Returns: int lightIntensity
brentdekker 0:4e0a8193b92e 100 * Description: Reads the lightIntensity from the module
brentdekker 0:4e0a8193b92e 101 */
brentdekker 0:4e0a8193b92e 102 int readLightIntensity();
brentdekker 0:4e0a8193b92e 103
brentdekker 0:4e0a8193b92e 104 /*
brentdekker 0:4e0a8193b92e 105 * Function: setRangeRegister
brentdekker 0:4e0a8193b92e 106 * Args: rangeVal
brentdekker 0:4e0a8193b92e 107 * Returns: void
brentdekker 0:4e0a8193b92e 108 * Description: Sets the maximum range for which the module waits for an echo
brentdekker 0:4e0a8193b92e 109 * The range is ((rangeVal x 43mm) + 43mm)
brentdekker 0:4e0a8193b92e 110 * The max range is about six meters
brentdekker 0:4e0a8193b92e 111 */
brentdekker 0:4e0a8193b92e 112 void setRangeRegister(char rangeVal);
brentdekker 0:4e0a8193b92e 113
brentdekker 0:4e0a8193b92e 114 /*
brentdekker 0:4e0a8193b92e 115 * Function: setAddress
brentdekker 0:4e0a8193b92e 116 * Args: address
brentdekker 0:4e0a8193b92e 117 * Returns: void
brentdekker 0:4e0a8193b92e 118 * Description: Sets the address of the module on the I2C bus. The factory default address is 0x0E (224)
brentdekker 0:4e0a8193b92e 119 * The address can have the following values:
brentdekker 0:4e0a8193b92e 120 * E0 | E2 | E4 | E6 ... FC | FE
brentdekker 0:4e0a8193b92e 121 */
brentdekker 0:4e0a8193b92e 122 void setAddress(char address);
brentdekker 0:4e0a8193b92e 123
brentdekker 0:4e0a8193b92e 124 private:
brentdekker 0:4e0a8193b92e 125 I2C m_i2c;
brentdekker 0:4e0a8193b92e 126 int m_addr;
brentdekker 1:76fb116fa28d 127 int rangeBuf[RANGEBUFSIZE];
brentdekker 1:76fb116fa28d 128 int rangeBufIndex;
brentdekker 1:76fb116fa28d 129
brentdekker 1:76fb116fa28d 130 int getAverageBufRange(void);
brentdekker 0:4e0a8193b92e 131 };
brentdekker 0:4e0a8193b92e 132
brentdekker 0:4e0a8193b92e 133 #endif