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:
el13tjoc
Date:
Sun May 10 01:55:56 2015 +0000
Revision:
5:abd72648aa5d
Parent:
4:a11bd4ea3c18
SRF08 Library;

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
el13tjoc 5:abd72648aa5d 28 #define INCHES 0x50 //Ranging Mode - Result in inches
el13tjoc 5:abd72648aa5d 29 #define CM 0x51 //Ranging Mode - Result in centimeters
el13tjoc 5:abd72648aa5d 30 #define US 0x52 //Ranging Mode - Result in micro-seconds
el13tjoc 5:abd72648aa5d 31
brentdekker 2:ca82f89f415d 32 /**
brentdekker 2:ca82f89f415d 33 * The SRF08 is an ultrasonic range finder with an I2C interface that allows
brentdekker 2:ca82f89f415d 34 * the measurement to be read directly in centimetres. More information can be
brentdekker 2:ca82f89f415d 35 * found on this website: http://www.robot-electronics.co.uk/htm/srf08tech.shtml
brentdekker 0:4e0a8193b92e 36 */
brentdekker 0:4e0a8193b92e 37 class SRF08 {
brentdekker 0:4e0a8193b92e 38
brentdekker 0:4e0a8193b92e 39 public:
brentdekker 0:4e0a8193b92e 40
brentdekker 2:ca82f89f415d 41 /**
brentdekker 2:ca82f89f415d 42 * Create a SRF08 object connected to the specified I2C pins and address
brentdekker 2:ca82f89f415d 43 *
brentdekker 2:ca82f89f415d 44 * @param SDA I2C SDA pin to connect to
brentdekker 2:ca82f89f415d 45 * @param SCL I2C SCL pin to connect to
brentdekker 2:ca82f89f415d 46 * @param i2cAddress Address of WSRF08 on I2C bus
brentdekker 0:4e0a8193b92e 47 */
brentdekker 2:ca82f89f415d 48 SRF08(PinName SDA, PinName SCL, int i2cAddress);
brentdekker 1:76fb116fa28d 49
brentdekker 2:ca82f89f415d 50 /**
brentdekker 2:ca82f89f415d 51 * Send the "Start ranging in cm" command via I2C
brentdekker 1:76fb116fa28d 52 */
el13tjoc 5:abd72648aa5d 53 void startRanging(char rangingType);
brentdekker 1:76fb116fa28d 54
brentdekker 2:ca82f89f415d 55 /**
brentdekker 2:ca82f89f415d 56 * Checks if the module has finished ranging
brentdekker 2:ca82f89f415d 57 *
brentdekker 2:ca82f89f415d 58 * @param returns Boolean stating module is finished or not
brentdekker 1:76fb116fa28d 59 */
brentdekker 1:76fb116fa28d 60 bool rangingFinished();
brentdekker 1:76fb116fa28d 61
brentdekker 2:ca82f89f415d 62 /**
brentdekker 2:ca82f89f415d 63 * Gets the measured range from the module
brentdekker 2:ca82f89f415d 64 *
brentdekker 2:ca82f89f415d 65 * @param returns Integer range in centimetre
brentdekker 0:4e0a8193b92e 66 */
brentdekker 2:ca82f89f415d 67 int getRange();
brentdekker 1:76fb116fa28d 68
brentdekker 2:ca82f89f415d 69 /**
brentdekker 2:ca82f89f415d 70 * Gets the measured light intensity from the module
brentdekker 2:ca82f89f415d 71 *
brentdekker 2:ca82f89f415d 72 * @param returns A normalised number 0-255 representing dark to light
brentdekker 1:76fb116fa28d 73 */
brentdekker 2:ca82f89f415d 74 int getLightIntensity();
brentdekker 2:ca82f89f415d 75
brentdekker 2:ca82f89f415d 76 /**
brentdekker 2:ca82f89f415d 77 * Sets the range register of the SRF08 for faster ranging.
brentdekker 2:ca82f89f415d 78 *
brentdekker 2:ca82f89f415d 79 * The max range is ((rangeVal x 43mm) + 43mm). The sensors maximum range
brentdekker 2:ca82f89f415d 80 * is about six metres
brentdekker 2:ca82f89f415d 81 *
brentdekker 2:ca82f89f415d 82 * @param rangeVal The value written to the range register of the SRF08
brentdekker 0:4e0a8193b92e 83 */
brentdekker 2:ca82f89f415d 84 void setRangeRegister(unsigned char rangeVal);
brentdekker 0:4e0a8193b92e 85
brentdekker 2:ca82f89f415d 86 /**
brentdekker 2:ca82f89f415d 87 * Sets the max gain register of the SRF08.
brentdekker 2:ca82f89f415d 88 *
brentdekker 2:ca82f89f415d 89 * @param gainVal The value written to the max gain register of the SRF08
brentdekker 0:4e0a8193b92e 90 */
brentdekker 2:ca82f89f415d 91 void setMaxGainRegister(unsigned char gainVal);
brentdekker 0:4e0a8193b92e 92
brentdekker 2:ca82f89f415d 93 /**
brentdekker 2:ca82f89f415d 94 * Changes the I2C address of the SRF08.
brentdekker 2:ca82f89f415d 95 *
brentdekker 2:ca82f89f415d 96 * The factory default address is 0x0E (224)
brentdekker 2:ca82f89f415d 97 * The address can have the following values:
brentdekker 2:ca82f89f415d 98 * E0 | E2 | E4 | E6 ... FC | FE
brentdekker 2:ca82f89f415d 99 *
brentdekker 2:ca82f89f415d 100 * @param i2cAddress The new I2C address for the SRF08.
brentdekker 0:4e0a8193b92e 101 */
brentdekker 2:ca82f89f415d 102 void setAddress(int i2cAddress);
brentdekker 0:4e0a8193b92e 103
brentdekker 2:ca82f89f415d 104 protected:
brentdekker 2:ca82f89f415d 105
brentdekker 2:ca82f89f415d 106 I2C i2cMod;
brentdekker 2:ca82f89f415d 107 unsigned char i2cAddress;
brentdekker 2:ca82f89f415d 108 Timeout rangeTimeout;
brentdekker 2:ca82f89f415d 109 bool rangingBusy;
brentdekker 2:ca82f89f415d 110
brentdekker 2:ca82f89f415d 111 void setRangingFinished();
brentdekker 0:4e0a8193b92e 112 };
brentdekker 0:4e0a8193b92e 113
brentdekker 2:ca82f89f415d 114 #endif