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:   DISCO-F746NG_LCDTS_demo Srf08Test

/media/uploads/brentdekker/ultrasonic-range-finder-srf08.jpg

SRF08

Warning

Don't forget to add the pullup resistors from 5v to SDA and SCL!

Information on the SRF08 can be found here: http://www.robot-electronics.co.uk/htm/srf08tech.shtml

Example program

#include "mbed.h"
#include "SRF08.h"

Serial PC(USBTX, USBRX);       //Debug port to PC
SRF08 rangeMod1(p28, p27, 0xE4); //SRF08 ranging module 1
SRF08 rangeMod2(p28, p27, 0xE2); //SRF08 ranging module 2

int main() {
    PC.printf("Start ranging test \n");
    rangeMod1.setAddress(0xE4); //Factory default is 0xE0
    while(1) {
        rangeMod1.startRanging();
        while (!rangeMod1.rangingFinished() ) wait(0.01);
        int range1 = rangeMod1.getRange();
        int light1 = rangeMod1.getLightIntensity();
        rangeMod2.startRanging();
        while (!rangeMod2.rangingFinished() ) wait(0.01);
        int range2 = rangeMod2.getRange();
        PC.printf(" Range_1: %i", range1);
        PC.printf(" Range_2: %i", range2);
        PC.printf(" Light_1: %i", light1);
        PC.printf("\n");
    }
}

Library

Import library

Public Member Functions

SRF08 (PinName SDA, PinName SCL, int i2cAddress)
Create a SRF08 object connected to the specified I2C pins and address.
void startRanging ()
Send the "Start ranging in cm" command via I2C.
bool rangingFinished ()
Checks if the module has finished ranging.
int getRange ()
Gets the measured range from the module.
int getLightIntensity ()
Gets the measured light intensity from the module.
void setRangeRegister (unsigned char rangeVal)
Sets the range register of the SRF08 for faster ranging.
void setMaxGainRegister (unsigned char gainVal)
Sets the max gain register of the SRF08 .
void setAddress (int i2cAddress)
Changes the I2C address of the SRF08 .
Committer:
brentdekker
Date:
Wed Jul 11 08:11:34 2012 +0000
Revision:
4:a11bd4ea3c18
Parent:
2:ca82f89f415d
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