Interface library for the Devantech SRF02/SRF08 ultrasonic i2c rangers. Depends on I2cRtosDriver lib!
SRF02_IF.cpp@0:2686e857daf6, 2013-02-21 (annotated)
- Committer:
- humlet
- Date:
- Thu Feb 21 23:40:36 2013 +0000
- Revision:
- 0:2686e857daf6
- Child:
- 1:32c4dd194228
first running
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
humlet | 0:2686e857daf6 | 1 | #include "SRF02_IF.h" |
humlet | 0:2686e857daf6 | 2 | |
humlet | 0:2686e857daf6 | 3 | SRF02_IF::SRF02_IF(int adr, I2C& i2c) : m_adr(adr), m_i2c(i2c) |
humlet | 0:2686e857daf6 | 4 | {} |
humlet | 0:2686e857daf6 | 5 | |
humlet | 0:2686e857daf6 | 6 | int SRF02_IF::triggerRanging() |
humlet | 0:2686e857daf6 | 7 | { |
humlet | 0:2686e857daf6 | 8 | const char regNcmd[2]= {0x00,0x52}; |
humlet | 0:2686e857daf6 | 9 | return m_i2c.write(m_adr, regNcmd, 2); |
humlet | 0:2686e857daf6 | 10 | } |
humlet | 0:2686e857daf6 | 11 | |
humlet | 0:2686e857daf6 | 12 | int SRF02_IF::triggerPing() |
humlet | 0:2686e857daf6 | 13 | { |
humlet | 0:2686e857daf6 | 14 | const char regNcmd[2]= {0x00,0x5C}; |
humlet | 0:2686e857daf6 | 15 | return m_i2c.write(m_adr, regNcmd, 2); |
humlet | 0:2686e857daf6 | 16 | } |
humlet | 0:2686e857daf6 | 17 | |
humlet | 0:2686e857daf6 | 18 | int SRF02_IF::triggerEchoMeasurement() |
humlet | 0:2686e857daf6 | 19 | { |
humlet | 0:2686e857daf6 | 20 | const char regNcmd[2]= {0x00,0x58}; |
humlet | 0:2686e857daf6 | 21 | return m_i2c.write(m_adr, regNcmd, 2); |
humlet | 0:2686e857daf6 | 22 | } |
humlet | 0:2686e857daf6 | 23 | |
humlet | 0:2686e857daf6 | 24 | int SRF02_IF::readTransitTime_us() |
humlet | 0:2686e857daf6 | 25 | { |
humlet | 0:2686e857daf6 | 26 | char chk[1]= {0xff}; |
humlet | 0:2686e857daf6 | 27 | while(chk[0] == 0xff) { |
humlet | 0:2686e857daf6 | 28 | m_i2c.write(m_adr, 0x00, 1, 1); |
humlet | 0:2686e857daf6 | 29 | m_i2c.read(m_adr, chk, 1); |
humlet | 0:2686e857daf6 | 30 | } |
humlet | 0:2686e857daf6 | 31 | /* //m_i2c.write(m_adr, 0x00, 1, 1); |
humlet | 0:2686e857daf6 | 32 | char eco; |
humlet | 0:2686e857daf6 | 33 | do { |
humlet | 0:2686e857daf6 | 34 | eco=m_i2c.read(1); |
humlet | 0:2686e857daf6 | 35 | } while(eco == 0xff); |
humlet | 0:2686e857daf6 | 36 | */ |
humlet | 0:2686e857daf6 | 37 | const char reg[1] = {0x02}; |
humlet | 0:2686e857daf6 | 38 | char result[2]; |
humlet | 0:2686e857daf6 | 39 | m_i2c.write(m_adr, reg, 1, 1); |
humlet | 0:2686e857daf6 | 40 | m_i2c.read(m_adr, result, 2); |
humlet | 0:2686e857daf6 | 41 | |
humlet | 0:2686e857daf6 | 42 | return (static_cast<int>(result[0])<<8)| static_cast<int>(result[1]); |
humlet | 0:2686e857daf6 | 43 | } |
humlet | 0:2686e857daf6 | 44 | |
humlet | 0:2686e857daf6 | 45 | void SRF02_IF::resetI2CAdress(int newAddress) |
humlet | 0:2686e857daf6 | 46 | { |
humlet | 0:2686e857daf6 | 47 | char regNcmd[2]; |
humlet | 0:2686e857daf6 | 48 | |
humlet | 0:2686e857daf6 | 49 | regNcmd[0]=0x00; |
humlet | 0:2686e857daf6 | 50 | |
humlet | 0:2686e857daf6 | 51 | regNcmd[1]=0xA0; |
humlet | 0:2686e857daf6 | 52 | m_i2c.write(m_adr,regNcmd,2); |
humlet | 0:2686e857daf6 | 53 | |
humlet | 0:2686e857daf6 | 54 | regNcmd[1]=0xAA; |
humlet | 0:2686e857daf6 | 55 | m_i2c.write(m_adr,regNcmd,2); |
humlet | 0:2686e857daf6 | 56 | |
humlet | 0:2686e857daf6 | 57 | regNcmd[1]=0xA5; |
humlet | 0:2686e857daf6 | 58 | m_i2c.write(m_adr,regNcmd,2); |
humlet | 0:2686e857daf6 | 59 | |
humlet | 0:2686e857daf6 | 60 | regNcmd[1]=newAddress; |
humlet | 0:2686e857daf6 | 61 | m_i2c.write(m_adr,regNcmd,2); |
humlet | 0:2686e857daf6 | 62 | } |
humlet | 0:2686e857daf6 | 63 | |
humlet | 0:2686e857daf6 | 64 |