Library for the SRF02 ultrasonic rangefinder

Dependencies:   mbed

Committer:
go2dev
Date:
Sun Jul 10 16:40:35 2011 +0000
Revision:
0:862f11d627f9
v2 of this library, condenses the code base as discussed in this thread: http://mbed.org/forum/helloworld/topic/2234/

Who changed what in which revision?

UserRevisionLine numberNew contents of line
go2dev 0:862f11d627f9 1
go2dev 0:862f11d627f9 2
go2dev 0:862f11d627f9 3 /*Library for SRF02 ultrasonic range finder*/
go2dev 0:862f11d627f9 4 #include "SRF02.h"
go2dev 0:862f11d627f9 5
go2dev 0:862f11d627f9 6
go2dev 0:862f11d627f9 7
go2dev 0:862f11d627f9 8 SRF02::SRF02(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr){
go2dev 0:862f11d627f9 9 //no initialisation code required here
go2dev 0:862f11d627f9 10 }
go2dev 0:862f11d627f9 11
go2dev 0:862f11d627f9 12 SRF02::~SRF02(){
go2dev 0:862f11d627f9 13
go2dev 0:862f11d627f9 14 }
go2dev 0:862f11d627f9 15
go2dev 0:862f11d627f9 16 float SRF02::measurecm() {
go2dev 0:862f11d627f9 17 float result = dosonar(0x51);
go2dev 0:862f11d627f9 18 return result;
go2dev 0:862f11d627f9 19 }
go2dev 0:862f11d627f9 20
go2dev 0:862f11d627f9 21 float SRF02::measureus() {
go2dev 0:862f11d627f9 22 float result = dosonar(0x52);
go2dev 0:862f11d627f9 23 return result;
go2dev 0:862f11d627f9 24 }
go2dev 0:862f11d627f9 25
go2dev 0:862f11d627f9 26 float SRF02::measurein() {
go2dev 0:862f11d627f9 27 float result = dosonar(0x50);
go2dev 0:862f11d627f9 28 return result;
go2dev 0:862f11d627f9 29 }
go2dev 0:862f11d627f9 30
go2dev 0:862f11d627f9 31
go2dev 0:862f11d627f9 32 float SRF02::dosonar(char rangetype){
go2dev 0:862f11d627f9 33 //local variables
go2dev 0:862f11d627f9 34 const char m_addr = 0xE0; //srf02 default slave address
go2dev 0:862f11d627f9 35 char commandsequence[2];
go2dev 0:862f11d627f9 36
go2dev 0:862f11d627f9 37 // Get range data from SRF02 in cm
go2dev 0:862f11d627f9 38 // Send Tx burst command over I2C bus
go2dev 0:862f11d627f9 39 commandsequence[0] = 0x00; // Command register
go2dev 0:862f11d627f9 40 commandsequence[1] = rangetype; // Ranging results type
go2dev 0:862f11d627f9 41 m_i2c.write(m_addr, commandsequence, 2); // Request ranging from sensor
go2dev 0:862f11d627f9 42 wait(0.07); // Average wait time for sonar pulse and processing
go2dev 0:862f11d627f9 43 // Read back range over I2C bus
go2dev 0:862f11d627f9 44 commandsequence[0] = 0x02; //
go2dev 0:862f11d627f9 45 m_i2c.write(m_addr, commandsequence, 1, 1); //
go2dev 0:862f11d627f9 46 m_i2c.read(m_addr, commandsequence, 2); // Read two-byte echo result
go2dev 0:862f11d627f9 47 //combine upper and lower bytes in to a single value
go2dev 0:862f11d627f9 48 float range = ((commandsequence[0] << 8) + commandsequence[1]);
go2dev 0:862f11d627f9 49 return range;
go2dev 0:862f11d627f9 50
go2dev 0:862f11d627f9 51 }
go2dev 0:862f11d627f9 52