Interface library for the Devantech SRF02/SRF08 ultrasonic i2c rangers. Depends on I2cRtosDriver lib!

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Srf0208IF.cpp Source File

Srf0208IF.cpp

00001 #include "Srf0208IF.h"
00002 #include "Thread.h"
00003 #include "I2CMasterRtos.h"
00004 
00005 using namespace mbed;
00006 using namespace rtos; 
00007 
00008 bool Srf0208IF::triggerRanging()
00009 {
00010     const char regNcmd[2]= {0x00,0x52};
00011     return !m_i2c.write(m_adr, regNcmd, 2);
00012 }
00013 int Srf0208IF::readTransitTime_us()
00014 {
00015     char result[2];
00016     bool ok = !m_i2c.read(m_adr, 0x02, result, 2);
00017     return ok ? twoByte2int(result) : -1;
00018 }
00019 void Srf0208IF::resetI2CAdress(int newAddress)
00020 {
00021     char regNcmd[2];
00022 
00023     regNcmd[0]=0x00;
00024 
00025     regNcmd[1]=0xA0;
00026     m_i2c.write(m_adr,regNcmd,2);
00027     Thread::wait(50);
00028 
00029     regNcmd[1]=0xAA;
00030     m_i2c.write(m_adr,regNcmd,2);
00031     Thread::wait(50);
00032 
00033     regNcmd[1]=0xA5;
00034     m_i2c.write(m_adr,regNcmd,2);
00035     Thread::wait(50);
00036 
00037     regNcmd[1]=newAddress;
00038     m_i2c.write(m_adr,regNcmd,2);
00039     Thread::wait(50);
00040 }
00041 int Srf0208IF::readSWRevision()
00042 {
00043     char swRev;
00044     bool ok = !m_i2c.read(m_adr, 0x00, &swRev, 1);
00045     return ok && swRev!=0xff ? swRev : -1;
00046 }
00047 
00048 
00049 
00050 bool Srf02IF::triggerPing()
00051 {
00052     const char regNcmd[2]= {0x00,0x5C};
00053     return !m_i2c.write(m_adr, regNcmd, 2);
00054 }
00055 bool Srf02IF::triggerEchoMeasurement()
00056 {
00057     const char regNcmd[2]= {0x00,0x58};
00058     return !m_i2c.write(m_adr, regNcmd, 2);
00059 }
00060 int Srf02IF::readMinimalTransitTime_us()
00061 {
00062     char result[2];
00063     bool ok = !m_i2c.read(m_adr, 0x04, result, 2);
00064     return ok ? twoByte2int(result) : -1;
00065 }
00066 
00067 
00068 
00069 int Srf08IF::readBrightness()
00070 {
00071     char val;
00072     bool ok = !m_i2c.read(m_adr, 0x01, &val, 1);
00073     return ok ? val : -1;
00074 }
00075 bool Srf08IF::triggerANNRanging()
00076 {
00077     const char regNcmd[2]= {0x00,0x55};
00078     return !m_i2c.write(m_adr, regNcmd, 2);
00079 }
00080 bool Srf08IF::writeMaxDist(int maxDst)
00081 {
00082     char regNcmd[2];
00083     regNcmd[0] = 0x02;
00084     regNcmd[0] = (char)maxDst;
00085     return !m_i2c.write(m_adr, regNcmd, 2);
00086 }
00087 bool Srf08IF::writeMaxGain(int maxGain)
00088 {
00089     char regNcmd[2];
00090     regNcmd[0] = 0x01;
00091     regNcmd[0] = (char)maxGain;
00092     return !m_i2c.write(m_adr, regNcmd, 2);
00093 }
00094 bool Srf08IF::burstRead(int startReg, int stopReg)
00095 {
00096     if(startReg<0)startReg=0;
00097     if(stopReg>35)stopReg=35;
00098     return !m_i2c.read(m_adr, startReg, &(m_rawBuffer[startReg]), stopReg-startReg+1);
00099 }
00100 
00101 
00102 
00103 
00104 
00105 
00106 
00107 
00108