Interface library for the Devantech SRF02/SRF08 ultrasonic i2c rangers. Depends on I2cRtosDriver lib!
Srf0208IF.cpp@3:70c946ba29cc, 2013-06-01 (annotated)
- Committer:
- humlet
- Date:
- Sat Jun 01 07:40:00 2013 +0000
- Revision:
- 3:70c946ba29cc
- Parent:
- 2:dfc8b09b4e3b
commitNpublish
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 | using namespace mbed; |
humlet | 3:70c946ba29cc | 6 | using namespace rtos; |
humlet | 2:dfc8b09b4e3b | 7 | |
humlet | 2:dfc8b09b4e3b | 8 | bool Srf0208IF::triggerRanging() |
humlet | 0:2686e857daf6 | 9 | { |
humlet | 0:2686e857daf6 | 10 | const char regNcmd[2]= {0x00,0x52}; |
humlet | 2:dfc8b09b4e3b | 11 | return !m_i2c.write(m_adr, regNcmd, 2); |
humlet | 0:2686e857daf6 | 12 | } |
humlet | 2:dfc8b09b4e3b | 13 | int Srf0208IF::readTransitTime_us() |
humlet | 0:2686e857daf6 | 14 | { |
humlet | 0:2686e857daf6 | 15 | char result[2]; |
humlet | 2:dfc8b09b4e3b | 16 | bool ok = !m_i2c.read(m_adr, 0x02, result, 2); |
humlet | 2:dfc8b09b4e3b | 17 | return ok ? twoByte2int(result) : -1; |
humlet | 0:2686e857daf6 | 18 | } |
humlet | 2:dfc8b09b4e3b | 19 | void Srf0208IF::resetI2CAdress(int newAddress) |
humlet | 0:2686e857daf6 | 20 | { |
humlet | 0:2686e857daf6 | 21 | char regNcmd[2]; |
humlet | 0:2686e857daf6 | 22 | |
humlet | 0:2686e857daf6 | 23 | regNcmd[0]=0x00; |
humlet | 0:2686e857daf6 | 24 | |
humlet | 0:2686e857daf6 | 25 | regNcmd[1]=0xA0; |
humlet | 0:2686e857daf6 | 26 | m_i2c.write(m_adr,regNcmd,2); |
humlet | 2:dfc8b09b4e3b | 27 | Thread::wait(50); |
humlet | 0:2686e857daf6 | 28 | |
humlet | 0:2686e857daf6 | 29 | regNcmd[1]=0xAA; |
humlet | 0:2686e857daf6 | 30 | m_i2c.write(m_adr,regNcmd,2); |
humlet | 2:dfc8b09b4e3b | 31 | Thread::wait(50); |
humlet | 0:2686e857daf6 | 32 | |
humlet | 0:2686e857daf6 | 33 | regNcmd[1]=0xA5; |
humlet | 0:2686e857daf6 | 34 | m_i2c.write(m_adr,regNcmd,2); |
humlet | 2:dfc8b09b4e3b | 35 | Thread::wait(50); |
humlet | 0:2686e857daf6 | 36 | |
humlet | 0:2686e857daf6 | 37 | regNcmd[1]=newAddress; |
humlet | 0:2686e857daf6 | 38 | m_i2c.write(m_adr,regNcmd,2); |
humlet | 2:dfc8b09b4e3b | 39 | Thread::wait(50); |
humlet | 2:dfc8b09b4e3b | 40 | } |
humlet | 2:dfc8b09b4e3b | 41 | int Srf0208IF::readSWRevision() |
humlet | 2:dfc8b09b4e3b | 42 | { |
humlet | 2:dfc8b09b4e3b | 43 | char swRev; |
humlet | 2:dfc8b09b4e3b | 44 | bool ok = !m_i2c.read(m_adr, 0x00, &swRev, 1); |
humlet | 2:dfc8b09b4e3b | 45 | return ok && swRev!=0xff ? swRev : -1; |
humlet | 2:dfc8b09b4e3b | 46 | } |
humlet | 2:dfc8b09b4e3b | 47 | |
humlet | 2:dfc8b09b4e3b | 48 | |
humlet | 2:dfc8b09b4e3b | 49 | |
humlet | 2:dfc8b09b4e3b | 50 | bool Srf02IF::triggerPing() |
humlet | 2:dfc8b09b4e3b | 51 | { |
humlet | 2:dfc8b09b4e3b | 52 | const char regNcmd[2]= {0x00,0x5C}; |
humlet | 2:dfc8b09b4e3b | 53 | return !m_i2c.write(m_adr, regNcmd, 2); |
humlet | 2:dfc8b09b4e3b | 54 | } |
humlet | 2:dfc8b09b4e3b | 55 | bool Srf02IF::triggerEchoMeasurement() |
humlet | 2:dfc8b09b4e3b | 56 | { |
humlet | 2:dfc8b09b4e3b | 57 | const char regNcmd[2]= {0x00,0x58}; |
humlet | 2:dfc8b09b4e3b | 58 | return !m_i2c.write(m_adr, regNcmd, 2); |
humlet | 2:dfc8b09b4e3b | 59 | } |
humlet | 2:dfc8b09b4e3b | 60 | int Srf02IF::readMinimalTransitTime_us() |
humlet | 2:dfc8b09b4e3b | 61 | { |
humlet | 2:dfc8b09b4e3b | 62 | char result[2]; |
humlet | 2:dfc8b09b4e3b | 63 | bool ok = !m_i2c.read(m_adr, 0x04, result, 2); |
humlet | 2:dfc8b09b4e3b | 64 | return ok ? twoByte2int(result) : -1; |
humlet | 0:2686e857daf6 | 65 | } |
humlet | 0:2686e857daf6 | 66 | |
humlet | 0:2686e857daf6 | 67 | |
humlet | 2:dfc8b09b4e3b | 68 | |
humlet | 2:dfc8b09b4e3b | 69 | int Srf08IF::readBrightness() |
humlet | 2:dfc8b09b4e3b | 70 | { |
humlet | 2:dfc8b09b4e3b | 71 | char val; |
humlet | 2:dfc8b09b4e3b | 72 | bool ok = !m_i2c.read(m_adr, 0x01, &val, 1); |
humlet | 2:dfc8b09b4e3b | 73 | return ok ? val : -1; |
humlet | 2:dfc8b09b4e3b | 74 | } |
humlet | 2:dfc8b09b4e3b | 75 | bool Srf08IF::triggerANNRanging() |
humlet | 2:dfc8b09b4e3b | 76 | { |
humlet | 2:dfc8b09b4e3b | 77 | const char regNcmd[2]= {0x00,0x55}; |
humlet | 2:dfc8b09b4e3b | 78 | return !m_i2c.write(m_adr, regNcmd, 2); |
humlet | 2:dfc8b09b4e3b | 79 | } |
humlet | 2:dfc8b09b4e3b | 80 | bool Srf08IF::writeMaxDist(int maxDst) |
humlet | 2:dfc8b09b4e3b | 81 | { |
humlet | 2:dfc8b09b4e3b | 82 | char regNcmd[2]; |
humlet | 2:dfc8b09b4e3b | 83 | regNcmd[0] = 0x02; |
humlet | 2:dfc8b09b4e3b | 84 | regNcmd[0] = (char)maxDst; |
humlet | 2:dfc8b09b4e3b | 85 | return !m_i2c.write(m_adr, regNcmd, 2); |
humlet | 2:dfc8b09b4e3b | 86 | } |
humlet | 2:dfc8b09b4e3b | 87 | bool Srf08IF::writeMaxGain(int maxGain) |
humlet | 2:dfc8b09b4e3b | 88 | { |
humlet | 2:dfc8b09b4e3b | 89 | char regNcmd[2]; |
humlet | 2:dfc8b09b4e3b | 90 | regNcmd[0] = 0x01; |
humlet | 2:dfc8b09b4e3b | 91 | regNcmd[0] = (char)maxGain; |
humlet | 2:dfc8b09b4e3b | 92 | return !m_i2c.write(m_adr, regNcmd, 2); |
humlet | 2:dfc8b09b4e3b | 93 | } |
humlet | 2:dfc8b09b4e3b | 94 | bool Srf08IF::burstRead(int startReg, int stopReg) |
humlet | 2:dfc8b09b4e3b | 95 | { |
humlet | 2:dfc8b09b4e3b | 96 | if(startReg<0)startReg=0; |
humlet | 2:dfc8b09b4e3b | 97 | if(stopReg>35)stopReg=35; |
humlet | 2:dfc8b09b4e3b | 98 | return !m_i2c.read(m_adr, startReg, &(m_rawBuffer[startReg]), stopReg-startReg+1); |
humlet | 2:dfc8b09b4e3b | 99 | } |
humlet | 2:dfc8b09b4e3b | 100 | |
humlet | 2:dfc8b09b4e3b | 101 | |
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 |