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

SRF02_IF.cpp

Committer:
humlet
Date:
2013-02-21
Revision:
0:2686e857daf6
Child:
1:32c4dd194228

File content as of revision 0:2686e857daf6:

#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);
}