SRF02 Ultrasonic Ranger
Dependents: DISCO-F746NG_SRF02_2
SRF02.cpp@0:adf5a063372d, 2014-07-31 (annotated)
- Committer:
- yangcq88517
- Date:
- Thu Jul 31 13:52:49 2014 +0000
- Revision:
- 0:adf5a063372d
SRF02
Who changed what in which revision?
User | Revision | Line number | New 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 | } |