Interface library for the Devantech SRF02/SRF08 ultrasonic i2c rangers. Depends on I2cRtosDriver lib!
Srf0208IF.cpp@2:dfc8b09b4e3b, 2013-05-26 (annotated)
- Committer:
- humlet
- Date:
- Sun May 26 20:52:27 2013 +0000
- Revision:
- 2:dfc8b09b4e3b
- Parent:
- SRF02_IF.cpp@1:32c4dd194228
- Child:
- 3:70c946ba29cc
initial
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
humlet | 2:dfc8b09b4e3b | 1 | #include "Srf0208IF.h" |
humlet | 2:dfc8b09b4e3b | 2 | #include "Thread.h" |
humlet | 2:dfc8b09b4e3b | 3 | #include "I2CMasterRtos.h" |
humlet | 0:2686e857daf6 | 4 | |
humlet | 2:dfc8b09b4e3b | 5 | #include "mbed.h" |
humlet | 0:2686e857daf6 | 6 | |
humlet | 2:dfc8b09b4e3b | 7 | using namespace mbed; |
humlet | 2:dfc8b09b4e3b | 8 | using namespace rtos; |
humlet | 2:dfc8b09b4e3b | 9 | |
humlet | 2:dfc8b09b4e3b | 10 | bool Srf0208IF::triggerRanging() |
humlet | 0:2686e857daf6 | 11 | { |
humlet | 0:2686e857daf6 | 12 | const char regNcmd[2]= {0x00,0x52}; |
humlet | 2:dfc8b09b4e3b | 13 | return !m_i2c.write(m_adr, regNcmd, 2); |
humlet | 0:2686e857daf6 | 14 | } |
humlet | 2:dfc8b09b4e3b | 15 | int Srf0208IF::readTransitTime_us() |
humlet | 0:2686e857daf6 | 16 | { |
humlet | 0:2686e857daf6 | 17 | char result[2]; |
humlet | 2:dfc8b09b4e3b | 18 | bool ok = !m_i2c.read(m_adr, 0x02, result, 2); |
humlet | 2:dfc8b09b4e3b | 19 | printf("%d %d \n",result[0],result[1]); |
humlet | 2:dfc8b09b4e3b | 20 | return ok ? twoByte2int(result) : -1; |
humlet | 0:2686e857daf6 | 21 | } |
humlet | 2:dfc8b09b4e3b | 22 | void Srf0208IF::resetI2CAdress(int newAddress) |
humlet | 0:2686e857daf6 | 23 | { |
humlet | 0:2686e857daf6 | 24 | char regNcmd[2]; |
humlet | 0:2686e857daf6 | 25 | |
humlet | 0:2686e857daf6 | 26 | regNcmd[0]=0x00; |
humlet | 0:2686e857daf6 | 27 | |
humlet | 0:2686e857daf6 | 28 | regNcmd[1]=0xA0; |
humlet | 0:2686e857daf6 | 29 | m_i2c.write(m_adr,regNcmd,2); |
humlet | 2:dfc8b09b4e3b | 30 | Thread::wait(50); |
humlet | 0:2686e857daf6 | 31 | |
humlet | 0:2686e857daf6 | 32 | regNcmd[1]=0xAA; |
humlet | 0:2686e857daf6 | 33 | m_i2c.write(m_adr,regNcmd,2); |
humlet | 2:dfc8b09b4e3b | 34 | Thread::wait(50); |
humlet | 0:2686e857daf6 | 35 | |
humlet | 0:2686e857daf6 | 36 | regNcmd[1]=0xA5; |
humlet | 0:2686e857daf6 | 37 | m_i2c.write(m_adr,regNcmd,2); |
humlet | 2:dfc8b09b4e3b | 38 | Thread::wait(50); |
humlet | 0:2686e857daf6 | 39 | |
humlet | 0:2686e857daf6 | 40 | regNcmd[1]=newAddress; |
humlet | 0:2686e857daf6 | 41 | m_i2c.write(m_adr,regNcmd,2); |
humlet | 2:dfc8b09b4e3b | 42 | Thread::wait(50); |
humlet | 2:dfc8b09b4e3b | 43 | } |
humlet | 2:dfc8b09b4e3b | 44 | int Srf0208IF::readSWRevision() |
humlet | 2:dfc8b09b4e3b | 45 | { |
humlet | 2:dfc8b09b4e3b | 46 | char swRev; |
humlet | 2:dfc8b09b4e3b | 47 | bool ok = !m_i2c.read(m_adr, 0x00, &swRev, 1); |
humlet | 2:dfc8b09b4e3b | 48 | return ok && swRev!=0xff ? swRev : -1; |
humlet | 2:dfc8b09b4e3b | 49 | } |
humlet | 2:dfc8b09b4e3b | 50 | |
humlet | 2:dfc8b09b4e3b | 51 | |
humlet | 2:dfc8b09b4e3b | 52 | |
humlet | 2:dfc8b09b4e3b | 53 | bool Srf02IF::triggerPing() |
humlet | 2:dfc8b09b4e3b | 54 | { |
humlet | 2:dfc8b09b4e3b | 55 | const char regNcmd[2]= {0x00,0x5C}; |
humlet | 2:dfc8b09b4e3b | 56 | return !m_i2c.write(m_adr, regNcmd, 2); |
humlet | 2:dfc8b09b4e3b | 57 | } |
humlet | 2:dfc8b09b4e3b | 58 | bool Srf02IF::triggerEchoMeasurement() |
humlet | 2:dfc8b09b4e3b | 59 | { |
humlet | 2:dfc8b09b4e3b | 60 | const char regNcmd[2]= {0x00,0x58}; |
humlet | 2:dfc8b09b4e3b | 61 | return !m_i2c.write(m_adr, regNcmd, 2); |
humlet | 2:dfc8b09b4e3b | 62 | } |
humlet | 2:dfc8b09b4e3b | 63 | int Srf02IF::readMinimalTransitTime_us() |
humlet | 2:dfc8b09b4e3b | 64 | { |
humlet | 2:dfc8b09b4e3b | 65 | char result[2]; |
humlet | 2:dfc8b09b4e3b | 66 | bool ok = !m_i2c.read(m_adr, 0x04, result, 2); |
humlet | 2:dfc8b09b4e3b | 67 | return ok ? twoByte2int(result) : -1; |
humlet | 0:2686e857daf6 | 68 | } |
humlet | 0:2686e857daf6 | 69 | |
humlet | 0:2686e857daf6 | 70 | |
humlet | 2:dfc8b09b4e3b | 71 | |
humlet | 2:dfc8b09b4e3b | 72 | int Srf08IF::readBrightness() |
humlet | 2:dfc8b09b4e3b | 73 | { |
humlet | 2:dfc8b09b4e3b | 74 | char val; |
humlet | 2:dfc8b09b4e3b | 75 | bool ok = !m_i2c.read(m_adr, 0x01, &val, 1); |
humlet | 2:dfc8b09b4e3b | 76 | return ok ? val : -1; |
humlet | 2:dfc8b09b4e3b | 77 | } |
humlet | 2:dfc8b09b4e3b | 78 | bool Srf08IF::triggerANNRanging() |
humlet | 2:dfc8b09b4e3b | 79 | { |
humlet | 2:dfc8b09b4e3b | 80 | const char regNcmd[2]= {0x00,0x55}; |
humlet | 2:dfc8b09b4e3b | 81 | return !m_i2c.write(m_adr, regNcmd, 2); |
humlet | 2:dfc8b09b4e3b | 82 | } |
humlet | 2:dfc8b09b4e3b | 83 | bool Srf08IF::writeMaxDist(int maxDst) |
humlet | 2:dfc8b09b4e3b | 84 | { |
humlet | 2:dfc8b09b4e3b | 85 | char regNcmd[2]; |
humlet | 2:dfc8b09b4e3b | 86 | regNcmd[0] = 0x02; |
humlet | 2:dfc8b09b4e3b | 87 | regNcmd[0] = (char)maxDst; |
humlet | 2:dfc8b09b4e3b | 88 | return !m_i2c.write(m_adr, regNcmd, 2); |
humlet | 2:dfc8b09b4e3b | 89 | } |
humlet | 2:dfc8b09b4e3b | 90 | bool Srf08IF::writeMaxGain(int maxGain) |
humlet | 2:dfc8b09b4e3b | 91 | { |
humlet | 2:dfc8b09b4e3b | 92 | char regNcmd[2]; |
humlet | 2:dfc8b09b4e3b | 93 | regNcmd[0] = 0x01; |
humlet | 2:dfc8b09b4e3b | 94 | regNcmd[0] = (char)maxGain; |
humlet | 2:dfc8b09b4e3b | 95 | return !m_i2c.write(m_adr, regNcmd, 2); |
humlet | 2:dfc8b09b4e3b | 96 | } |
humlet | 2:dfc8b09b4e3b | 97 | bool Srf08IF::burstRead(int startReg, int stopReg) |
humlet | 2:dfc8b09b4e3b | 98 | { |
humlet | 2:dfc8b09b4e3b | 99 | if(startReg<0)startReg=0; |
humlet | 2:dfc8b09b4e3b | 100 | if(stopReg>35)stopReg=35; |
humlet | 2:dfc8b09b4e3b | 101 | return !m_i2c.read(m_adr, startReg, &(m_rawBuffer[startReg]), stopReg-startReg+1); |
humlet | 2:dfc8b09b4e3b | 102 | } |
humlet | 2:dfc8b09b4e3b | 103 | |
humlet | 2:dfc8b09b4e3b | 104 | |
humlet | 2:dfc8b09b4e3b | 105 | |
humlet | 2:dfc8b09b4e3b | 106 | |
humlet | 2:dfc8b09b4e3b | 107 | |
humlet | 2:dfc8b09b4e3b | 108 | |
humlet | 2:dfc8b09b4e3b | 109 | |
humlet | 2:dfc8b09b4e3b | 110 | |
humlet | 2:dfc8b09b4e3b | 111 |