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 .
Revision:
1:76fb116fa28d
Parent:
0:4e0a8193b92e
Child:
2:ca82f89f415d
--- a/SRF08.h	Thu Jul 05 09:53:18 2012 +0000
+++ b/SRF08.h	Tue Jul 10 08:48:02 2012 +0000
@@ -26,6 +26,8 @@
 
 #include "mbed.h"
 
+#define RANGEBUFSIZE 5
+
 /*
  * The SRF08 is an Ultrasonic range finder, with an I2C interface that allows the measurement to be read directly in centimetres
  */
@@ -50,14 +52,46 @@
      * Description: Destroys instance of SRF08 class
      */
     ~SRF08();
-
+    
+    /* 
+     * Function:    startRanging
+     * Args:        void
+     * Returns:     void
+     * Description: Sends command to module to start ranging.
+     */
+    void startRanging();
+    
+    /* 
+     * Function:    rangingFinished
+     * Args:        void
+     * Returns:     Bool: whether ranging is finished
+     * Description: Checks if the ranging process on the module is finished
+     */
+    bool rangingFinished();
+    
+    /* 
+     * Function:    getRange
+     * Args:        void
+     * Returns:     int range
+     * Description: Range in cm. This function should only be called when ranging is finished, otherwise previous value is returned
+     */
+    void getRange();
+    
     /*
      * Function:    readRange
      * Args:        void
      * Returns:     int range
      * Description: Reads the range register and converts it to a usable value
      */
-    int read();
+    int readRange();
+    
+    /*
+     * Function:    readBufRange
+     * Args:        void
+     * Returns:     int range
+     * Description: Reads the range register, adds it to an array and converts it to a filtered value
+     */
+    //int readBufRange();
     
     /*
      * Function:    readLightIntensity
@@ -90,7 +124,10 @@
 private:
     I2C m_i2c;
     int m_addr;
-
+    int rangeBuf[RANGEBUFSIZE];
+    int rangeBufIndex;
+    
+    int getAverageBufRange(void);
 };
 
 #endif