SRF02 Ultrasonic Ranger

Dependents:   DISCO-F746NG_SRF02_2

Committer:
yangcq88517
Date:
Thu Jul 31 13:52:49 2014 +0000
Revision:
0:adf5a063372d
SRF02

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yangcq88517 0:adf5a063372d 1 #include "SRF02.h"
yangcq88517 0:adf5a063372d 2
yangcq88517 0:adf5a063372d 3 SRF02::SRF02(uint8_t I2C_address,PinName sda, PinName scl): i2c_bus(sda,scl)
yangcq88517 0:adf5a063372d 4 {
yangcq88517 0:adf5a063372d 5 deviceAddess = I2C_address;
yangcq88517 0:adf5a063372d 6 }
yangcq88517 0:adf5a063372d 7
yangcq88517 0:adf5a063372d 8 int SRF02::GetValue(uint8_t command, uint8_t mode)
yangcq88517 0:adf5a063372d 9 {
yangcq88517 0:adf5a063372d 10 char w[2]= {COMMAND_REGISTER,command};
yangcq88517 0:adf5a063372d 11 if (i2c_bus.write(deviceAddess,w ,2)>=0)
yangcq88517 0:adf5a063372d 12 wait(DefaultWait);
yangcq88517 0:adf5a063372d 13 else return -1;
yangcq88517 0:adf5a063372d 14 char r[1] = {mode};
yangcq88517 0:adf5a063372d 15 if (i2c_bus.write(deviceAddess,r ,1)>=0)
yangcq88517 0:adf5a063372d 16 if (i2c_bus.read(deviceAddess, w, 2)>=0)
yangcq88517 0:adf5a063372d 17 return (w[0] << 8) | w[1];
yangcq88517 0:adf5a063372d 18 return -1;
yangcq88517 0:adf5a063372d 19 }
yangcq88517 0:adf5a063372d 20
yangcq88517 0:adf5a063372d 21 int SRF02::GetMinimumRange()
yangcq88517 0:adf5a063372d 22 {
yangcq88517 0:adf5a063372d 23 return GetValue(REAL_RANGING_CENTIMETERS,Autotune);
yangcq88517 0:adf5a063372d 24 }
yangcq88517 0:adf5a063372d 25
yangcq88517 0:adf5a063372d 26 int SRF02::GetCentimeters()
yangcq88517 0:adf5a063372d 27 {
yangcq88517 0:adf5a063372d 28 return GetValue(REAL_RANGING_CENTIMETERS,Range);
yangcq88517 0:adf5a063372d 29 }
yangcq88517 0:adf5a063372d 30
yangcq88517 0:adf5a063372d 31 int SRF02::GetInches()
yangcq88517 0:adf5a063372d 32 {
yangcq88517 0:adf5a063372d 33 return GetValue(REAL_RANGING_INCHES,Range);
yangcq88517 0:adf5a063372d 34 }
yangcq88517 0:adf5a063372d 35
yangcq88517 0:adf5a063372d 36 int SRF02::GetMicroSeconds()
yangcq88517 0:adf5a063372d 37 {
yangcq88517 0:adf5a063372d 38 return GetValue(REAL_RANGING_SECONDS,Range);
yangcq88517 0:adf5a063372d 39 }
yangcq88517 0:adf5a063372d 40
yangcq88517 0:adf5a063372d 41 bool SRF02::ChangeAddress(uint8_t newAddress)
yangcq88517 0:adf5a063372d 42 {
yangcq88517 0:adf5a063372d 43 char w[2]= {COMMAND_REGISTER,0xA0};
yangcq88517 0:adf5a063372d 44 if (i2c_bus.write(deviceAddess,w ,2)>=0)
yangcq88517 0:adf5a063372d 45 w[1] = 0xAA;
yangcq88517 0:adf5a063372d 46 else return false;
yangcq88517 0:adf5a063372d 47 if (i2c_bus.write(deviceAddess,w ,2)>=0)
yangcq88517 0:adf5a063372d 48 w[1] = 0xA5;
yangcq88517 0:adf5a063372d 49 else return false;
yangcq88517 0:adf5a063372d 50 if (i2c_bus.write(deviceAddess,w ,2)>=0)
yangcq88517 0:adf5a063372d 51 w[1] = newAddress;
yangcq88517 0:adf5a063372d 52 else return false;
yangcq88517 0:adf5a063372d 53 if (i2c_bus.write(deviceAddess,w ,2)>=0) {
yangcq88517 0:adf5a063372d 54 deviceAddess = newAddress;
yangcq88517 0:adf5a063372d 55 return true;
yangcq88517 0:adf5a063372d 56 }
yangcq88517 0:adf5a063372d 57 return false;
yangcq88517 0:adf5a063372d 58 }