Simple library for reading distance from SRF02 Ultrasonic Sensor in I2C mode.

Dependents:   Project_A el13jarDistanceSensorProject UltrasonicDistanceSensor-el13jb Distance_Sensor_SRF02 ... more

Committer:
eencae
Date:
Wed Jun 22 15:49:12 2016 +0000
Revision:
2:cb489f486ece
Parent:
1:8e6587d88773
Added method to change the address of the sensor on the bus. Address is specified using the constructor method.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
eencae 0:b729d2ce03bd 1 /**
eencae 0:b729d2ce03bd 2 @file SRF02.h
eencae 0:b729d2ce03bd 3
eencae 0:b729d2ce03bd 4 @brief Header file containing member functions and variables
eencae 0:b729d2ce03bd 5
eencae 0:b729d2ce03bd 6 */
eencae 0:b729d2ce03bd 7
eencae 0:b729d2ce03bd 8 #ifndef SRF02_H
eencae 0:b729d2ce03bd 9 #define SRF02_H
eencae 0:b729d2ce03bd 10
eencae 0:b729d2ce03bd 11 // registers
eencae 0:b729d2ce03bd 12 #define CMD_REG 0x00
eencae 0:b729d2ce03bd 13 #define RANGE_H_REG 0x02
eencae 0:b729d2ce03bd 14 #define RANGE_L_REG 0x03
eencae 0:b729d2ce03bd 15
eencae 0:b729d2ce03bd 16 // commands
eencae 0:b729d2ce03bd 17 #define INCH_CMD 0x50
eencae 0:b729d2ce03bd 18 #define CM_CMD 0x51
eencae 0:b729d2ce03bd 19 #define US_CMD 0x52
eencae 0:b729d2ce03bd 20
eencae 0:b729d2ce03bd 21 #include "mbed.h"
eencae 0:b729d2ce03bd 22
eencae 0:b729d2ce03bd 23 /**
eencae 0:b729d2ce03bd 24 @brief Library for interfacing with SRF02 Ultrasonic Sensor in I2C
eencae 0:b729d2ce03bd 25 @see http://www.robot-electronics.co.uk/htm/srf02tech.htm
eencae 0:b729d2ce03bd 26
eencae 2:cb489f486ece 27 @brief Revision 1.1
eencae 0:b729d2ce03bd 28
eencae 0:b729d2ce03bd 29 @author Craig A. Evans
eencae 2:cb489f486ece 30 @date June 2016
eencae 0:b729d2ce03bd 31 *
eencae 0:b729d2ce03bd 32 * Example:
eencae 0:b729d2ce03bd 33 * @code
eencae 0:b729d2ce03bd 34
eencae 0:b729d2ce03bd 35 #include "mbed.h"
eencae 0:b729d2ce03bd 36 #include "SRF02.h"
eencae 2:cb489f486ece 37
eencae 2:cb489f486ece 38 SRF02 sensor(p28,p27,0xE0); // SDA, SCL, address
eencae 0:b729d2ce03bd 39
eencae 0:b729d2ce03bd 40 int main() {
eencae 0:b729d2ce03bd 41
eencae 0:b729d2ce03bd 42 while(1) {
eencae 0:b729d2ce03bd 43
eencae 0:b729d2ce03bd 44 // read sensor distance in cm and print over serial port
eencae 0:b729d2ce03bd 45 int distance = sensor.getDistanceCm();
eencae 0:b729d2ce03bd 46 serial.printf("Distance = %d cm\n",distance);
eencae 0:b729d2ce03bd 47 // short delay before next measurement
eencae 0:b729d2ce03bd 48 wait(0.5);
eencae 0:b729d2ce03bd 49
eencae 0:b729d2ce03bd 50 }
eencae 0:b729d2ce03bd 51 }
eencae 0:b729d2ce03bd 52 * @endcode
eencae 0:b729d2ce03bd 53 */
eencae 0:b729d2ce03bd 54
eencae 0:b729d2ce03bd 55 class SRF02
eencae 0:b729d2ce03bd 56 {
eencae 0:b729d2ce03bd 57 public:
eencae 0:b729d2ce03bd 58
eencae 1:8e6587d88773 59 /** Create a SRF02 object connected to the specified I2C pins
eencae 1:8e6587d88773 60 *
eencae 1:8e6587d88773 61 * @param sdaPin - mbed SDA pin
eencae 1:8e6587d88773 62 * @param sclPin - mbed SCL pin
eencae 2:cb489f486ece 63 * @param addr - write address of the SRF02 sensor
eencae 1:8e6587d88773 64 *
eencae 1:8e6587d88773 65 */
eencae 2:cb489f486ece 66 SRF02(PinName sdaPin, PinName sclPin, char addr);
eencae 1:8e6587d88773 67 /** Read distance in centimetres
eencae 1:8e6587d88773 68 *
eencae 1:8e6587d88773 69 * @returns distance in centimetres (int)
eencae 1:8e6587d88773 70 *
eencae 1:8e6587d88773 71 */
eencae 0:b729d2ce03bd 72 int getDistanceCm();
eencae 2:cb489f486ece 73 /** Change I2C address of SRF02 sensor
eencae 2:cb489f486ece 74 *
eencae 2:cb489f486ece 75 * @param address - @see https://www.robot-electronics.co.uk/htm/srf02techI2C.htm for valid addresses
eencae 2:cb489f486ece 76 *
eencae 2:cb489f486ece 77 */
eencae 2:cb489f486ece 78 void changeAddress(char addr);
eencae 0:b729d2ce03bd 79
eencae 0:b729d2ce03bd 80 private:
eencae 1:8e6587d88773 81 /** Hangs in infinite loop flashing 'blue lights of death'
eencae 1:8e6587d88773 82 *
eencae 1:8e6587d88773 83 */
eencae 0:b729d2ce03bd 84 void error();
eencae 0:b729d2ce03bd 85
eencae 0:b729d2ce03bd 86
eencae 0:b729d2ce03bd 87 private: // private variables
eencae 0:b729d2ce03bd 88 I2C* i2c;
eencae 0:b729d2ce03bd 89 BusOut* leds;
eencae 2:cb489f486ece 90
eencae 2:cb489f486ece 91 char w_addr_; // write address of sensor
eencae 2:cb489f486ece 92 char r_addr_; // read address (= write address + 1)
eencae 0:b729d2ce03bd 93 };
eencae 0:b729d2ce03bd 94
eencae 0:b729d2ce03bd 95 #endif