Interface library for the Devantech SRF02/SRF08 ultrasonic i2c rangers. Depends on I2cRtosDriver lib!
SRF02_IF.cpp
- Committer:
- humlet
- Date:
- 2013-02-23
- Revision:
- 1:32c4dd194228
- Parent:
- 0:2686e857daf6
File content as of revision 1:32c4dd194228:
#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(int* dbg) { static Timer tmr; tmr.reset(); tmr.start(); char chk[1]= {0xff}; int cnt=0; while((unsigned char)chk[0] == 0xff && tmr.read_ms()<100) { dbg[0]=m_i2c.write(m_adr, 0x00, 1); // evillive: check if necessary dbg[1]=tmr.read_us(); dbg[2]=m_i2c.read(m_adr, chk, 1); dbg[3]=tmr.read_us(); dbg[4]=(unsigned char)chk[0]; dbg[5]=++cnt; } /*int a=m_i2c.write(m_adr, 0x00, 1, 1); // evillive: check if necessary int eco; do { eco=m_i2c.read(1); pc.printf("%x ", eco); } while(eco == 0xff); pc.printf("\n");*/ const char reg[1] = {0x02}; char result[2]; m_i2c.write(m_adr, reg, 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); }