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

Revision:
0:2686e857daf6
Child:
1:32c4dd194228
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SRF02_IF.cpp	Thu Feb 21 23:40:36 2013 +0000
@@ -0,0 +1,64 @@
+#include "SRF02_IF.h"
+
+SRF02_IF::SRF02_IF(int adr, I2C& i2c) : m_adr(adr), m_i2c(i2c)
+{}
+
+int SRF02_IF::triggerRanging()
+{
+    const char regNcmd[2]= {0x00,0x52};
+    return m_i2c.write(m_adr, regNcmd, 2);
+}
+
+int SRF02_IF::triggerPing()
+{
+    const char regNcmd[2]= {0x00,0x5C};
+    return m_i2c.write(m_adr, regNcmd, 2);
+}
+
+int SRF02_IF::triggerEchoMeasurement()
+{
+    const char regNcmd[2]= {0x00,0x58};
+    return m_i2c.write(m_adr, regNcmd, 2);
+}
+
+int SRF02_IF::readTransitTime_us()
+{
+    char chk[1]= {0xff};
+    while(chk[0] == 0xff) {
+        m_i2c.write(m_adr, 0x00, 1, 1);
+        m_i2c.read(m_adr, chk, 1);
+    }
+/*   //m_i2c.write(m_adr, 0x00, 1, 1);
+    char eco;
+    do {
+        eco=m_i2c.read(1);
+    } while(eco == 0xff);
+*/
+    const char reg[1] = {0x02};
+    char result[2];
+    m_i2c.write(m_adr, reg, 1, 1);
+    m_i2c.read(m_adr, result, 2);
+
+    return (static_cast<int>(result[0])<<8)| static_cast<int>(result[1]);
+}
+
+void SRF02_IF::resetI2CAdress(int newAddress)
+{
+    char regNcmd[2];
+
+    regNcmd[0]=0x00;
+
+    regNcmd[1]=0xA0;
+    m_i2c.write(m_adr,regNcmd,2);
+
+    regNcmd[1]=0xAA;
+    m_i2c.write(m_adr,regNcmd,2);
+
+    regNcmd[1]=0xA5;
+    m_i2c.write(m_adr,regNcmd,2);
+
+    regNcmd[1]=newAddress;
+    m_i2c.write(m_adr,regNcmd,2);
+}
+
+