Simple library for reading distance from SRF02 Ultrasonic Sensor in I2C mode.
Dependents: Project_A el13jarDistanceSensorProject UltrasonicDistanceSensor-el13jb Distance_Sensor_SRF02 ... more
SRF02.h@2:cb489f486ece, 2016-06-22 (annotated)
- 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?
User | Revision | Line number | New 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 |