Interface library for the Devantech SRF02/SRF08 ultrasonic i2c rangers. Depends on I2cRtosDriver lib!
Embed:
(wiki syntax)
Show/hide line numbers
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
Generated on Tue Jul 12 2022 20:48:48 by 1.7.2