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:
Wed Jul 11 08:11:34 2012 +0000
Revision:
4:a11bd4ea3c18
Parent:
2:ca82f89f415d
Child:
5:abd72648aa5d
Removed debug code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
brentdekker 0:4e0a8193b92e 1 /*
brentdekker 2:ca82f89f415d 2 Copyright (c) 2012 Brent Dekker
brentdekker 0:4e0a8193b92e 3
brentdekker 0:4e0a8193b92e 4 Permission is hereby granted, free of charge, to any person obtaining a copy
brentdekker 0:4e0a8193b92e 5 of this software and associated documentation files (the "Software"), to deal
brentdekker 0:4e0a8193b92e 6 in the Software without restriction, including without limitation the rights
brentdekker 0:4e0a8193b92e 7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
brentdekker 0:4e0a8193b92e 8 copies of the Software, and to permit persons to whom the Software is
brentdekker 0:4e0a8193b92e 9 furnished to do so, subject to the following conditions:
brentdekker 0:4e0a8193b92e 10
brentdekker 0:4e0a8193b92e 11 The above copyright notice and this permission notice shall be included in
brentdekker 0:4e0a8193b92e 12 all copies or substantial portions of the Software.
brentdekker 0:4e0a8193b92e 13
brentdekker 0:4e0a8193b92e 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
brentdekker 0:4e0a8193b92e 15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
brentdekker 0:4e0a8193b92e 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
brentdekker 0:4e0a8193b92e 17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
brentdekker 0:4e0a8193b92e 18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
brentdekker 0:4e0a8193b92e 19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
brentdekker 0:4e0a8193b92e 20 THE SOFTWARE.
brentdekker 0:4e0a8193b92e 21 */
brentdekker 0:4e0a8193b92e 22
brentdekker 0:4e0a8193b92e 23 #ifndef SRF08_H
brentdekker 0:4e0a8193b92e 24 #define SRF08_H
brentdekker 0:4e0a8193b92e 25
brentdekker 0:4e0a8193b92e 26 #include "mbed.h"
brentdekker 0:4e0a8193b92e 27
brentdekker 2:ca82f89f415d 28 /**
brentdekker 2:ca82f89f415d 29 * The SRF08 is an ultrasonic range finder with an I2C interface that allows
brentdekker 2:ca82f89f415d 30 * the measurement to be read directly in centimetres. More information can be
brentdekker 2:ca82f89f415d 31 * found on this website: http://www.robot-electronics.co.uk/htm/srf08tech.shtml
brentdekker 0:4e0a8193b92e 32 */
brentdekker 0:4e0a8193b92e 33 class SRF08 {
brentdekker 0:4e0a8193b92e 34
brentdekker 0:4e0a8193b92e 35 public:
brentdekker 0:4e0a8193b92e 36
brentdekker 2:ca82f89f415d 37 /**
brentdekker 2:ca82f89f415d 38 * Create a SRF08 object connected to the specified I2C pins and address
brentdekker 2:ca82f89f415d 39 *
brentdekker 2:ca82f89f415d 40 * @param SDA I2C SDA pin to connect to
brentdekker 2:ca82f89f415d 41 * @param SCL I2C SCL pin to connect to
brentdekker 2:ca82f89f415d 42 * @param i2cAddress Address of WSRF08 on I2C bus
brentdekker 0:4e0a8193b92e 43 */
brentdekker 2:ca82f89f415d 44 SRF08(PinName SDA, PinName SCL, int i2cAddress);
brentdekker 1:76fb116fa28d 45
brentdekker 2:ca82f89f415d 46 /**
brentdekker 2:ca82f89f415d 47 * Send the "Start ranging in cm" command via I2C
brentdekker 1:76fb116fa28d 48 */
brentdekker 1:76fb116fa28d 49 void startRanging();
brentdekker 1:76fb116fa28d 50
brentdekker 2:ca82f89f415d 51 /**
brentdekker 2:ca82f89f415d 52 * Checks if the module has finished ranging
brentdekker 2:ca82f89f415d 53 *
brentdekker 2:ca82f89f415d 54 * @param returns Boolean stating module is finished or not
brentdekker 1:76fb116fa28d 55 */
brentdekker 1:76fb116fa28d 56 bool rangingFinished();
brentdekker 1:76fb116fa28d 57
brentdekker 2:ca82f89f415d 58 /**
brentdekker 2:ca82f89f415d 59 * Gets the measured range from the module
brentdekker 2:ca82f89f415d 60 *
brentdekker 2:ca82f89f415d 61 * @param returns Integer range in centimetre
brentdekker 0:4e0a8193b92e 62 */
brentdekker 2:ca82f89f415d 63 int getRange();
brentdekker 1:76fb116fa28d 64
brentdekker 2:ca82f89f415d 65 /**
brentdekker 2:ca82f89f415d 66 * Gets the measured light intensity from the module
brentdekker 2:ca82f89f415d 67 *
brentdekker 2:ca82f89f415d 68 * @param returns A normalised number 0-255 representing dark to light
brentdekker 1:76fb116fa28d 69 */
brentdekker 2:ca82f89f415d 70 int getLightIntensity();
brentdekker 2:ca82f89f415d 71
brentdekker 2:ca82f89f415d 72 /**
brentdekker 2:ca82f89f415d 73 * Sets the range register of the SRF08 for faster ranging.
brentdekker 2:ca82f89f415d 74 *
brentdekker 2:ca82f89f415d 75 * The max range is ((rangeVal x 43mm) + 43mm). The sensors maximum range
brentdekker 2:ca82f89f415d 76 * is about six metres
brentdekker 2:ca82f89f415d 77 *
brentdekker 2:ca82f89f415d 78 * @param rangeVal The value written to the range register of the SRF08
brentdekker 0:4e0a8193b92e 79 */
brentdekker 2:ca82f89f415d 80 void setRangeRegister(unsigned char rangeVal);
brentdekker 0:4e0a8193b92e 81
brentdekker 2:ca82f89f415d 82 /**
brentdekker 2:ca82f89f415d 83 * Sets the max gain register of the SRF08.
brentdekker 2:ca82f89f415d 84 *
brentdekker 2:ca82f89f415d 85 * @param gainVal The value written to the max gain register of the SRF08
brentdekker 0:4e0a8193b92e 86 */
brentdekker 2:ca82f89f415d 87 void setMaxGainRegister(unsigned char gainVal);
brentdekker 0:4e0a8193b92e 88
brentdekker 2:ca82f89f415d 89 /**
brentdekker 2:ca82f89f415d 90 * Changes the I2C address of the SRF08.
brentdekker 2:ca82f89f415d 91 *
brentdekker 2:ca82f89f415d 92 * The factory default address is 0x0E (224)
brentdekker 2:ca82f89f415d 93 * The address can have the following values:
brentdekker 2:ca82f89f415d 94 * E0 | E2 | E4 | E6 ... FC | FE
brentdekker 2:ca82f89f415d 95 *
brentdekker 2:ca82f89f415d 96 * @param i2cAddress The new I2C address for the SRF08.
brentdekker 0:4e0a8193b92e 97 */
brentdekker 2:ca82f89f415d 98 void setAddress(int i2cAddress);
brentdekker 0:4e0a8193b92e 99
brentdekker 2:ca82f89f415d 100 protected:
brentdekker 2:ca82f89f415d 101
brentdekker 2:ca82f89f415d 102 I2C i2cMod;
brentdekker 2:ca82f89f415d 103 unsigned char i2cAddress;
brentdekker 2:ca82f89f415d 104 Timeout rangeTimeout;
brentdekker 2:ca82f89f415d 105 bool rangingBusy;
brentdekker 2:ca82f89f415d 106
brentdekker 2:ca82f89f415d 107 void setRangingFinished();
brentdekker 0:4e0a8193b92e 108 };
brentdekker 0:4e0a8193b92e 109
brentdekker 2:ca82f89f415d 110 #endif