Interface library for the Devantech SRF02/SRF08 ultrasonic i2c rangers. Depends on I2cRtosDriver lib!
Diff: Srf0208IF.cpp
- Revision:
- 2:dfc8b09b4e3b
- Parent:
- 1:32c4dd194228
- Child:
- 3:70c946ba29cc
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Srf0208IF.cpp Sun May 26 20:52:27 2013 +0000 @@ -0,0 +1,111 @@ +#include "Srf0208IF.h" +#include "Thread.h" +#include "I2CMasterRtos.h" + +#include "mbed.h" + +using namespace mbed; +using namespace rtos; + +bool Srf0208IF::triggerRanging() +{ + const char regNcmd[2]= {0x00,0x52}; + return !m_i2c.write(m_adr, regNcmd, 2); +} +int Srf0208IF::readTransitTime_us() +{ + char result[2]; + bool ok = !m_i2c.read(m_adr, 0x02, result, 2); + printf("%d %d \n",result[0],result[1]); + return ok ? twoByte2int(result) : -1; +} +void Srf0208IF::resetI2CAdress(int newAddress) +{ + char regNcmd[2]; + + regNcmd[0]=0x00; + + regNcmd[1]=0xA0; + m_i2c.write(m_adr,regNcmd,2); + Thread::wait(50); + + regNcmd[1]=0xAA; + m_i2c.write(m_adr,regNcmd,2); + Thread::wait(50); + + regNcmd[1]=0xA5; + m_i2c.write(m_adr,regNcmd,2); + Thread::wait(50); + + regNcmd[1]=newAddress; + m_i2c.write(m_adr,regNcmd,2); + Thread::wait(50); +} +int Srf0208IF::readSWRevision() +{ + char swRev; + bool ok = !m_i2c.read(m_adr, 0x00, &swRev, 1); + return ok && swRev!=0xff ? swRev : -1; +} + + + +bool Srf02IF::triggerPing() +{ + const char regNcmd[2]= {0x00,0x5C}; + return !m_i2c.write(m_adr, regNcmd, 2); +} +bool Srf02IF::triggerEchoMeasurement() +{ + const char regNcmd[2]= {0x00,0x58}; + return !m_i2c.write(m_adr, regNcmd, 2); +} +int Srf02IF::readMinimalTransitTime_us() +{ + char result[2]; + bool ok = !m_i2c.read(m_adr, 0x04, result, 2); + return ok ? twoByte2int(result) : -1; +} + + + +int Srf08IF::readBrightness() +{ + char val; + bool ok = !m_i2c.read(m_adr, 0x01, &val, 1); + return ok ? val : -1; +} +bool Srf08IF::triggerANNRanging() +{ + const char regNcmd[2]= {0x00,0x55}; + return !m_i2c.write(m_adr, regNcmd, 2); +} +bool Srf08IF::writeMaxDist(int maxDst) +{ + char regNcmd[2]; + regNcmd[0] = 0x02; + regNcmd[0] = (char)maxDst; + return !m_i2c.write(m_adr, regNcmd, 2); +} +bool Srf08IF::writeMaxGain(int maxGain) +{ + char regNcmd[2]; + regNcmd[0] = 0x01; + regNcmd[0] = (char)maxGain; + return !m_i2c.write(m_adr, regNcmd, 2); +} +bool Srf08IF::burstRead(int startReg, int stopReg) +{ + if(startReg<0)startReg=0; + if(stopReg>35)stopReg=35; + return !m_i2c.read(m_adr, startReg, &(m_rawBuffer[startReg]), stopReg-startReg+1); +} + + + + + + + + +