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

Srf0208IF.cpp

Committer:
humlet
Date:
2013-05-26
Revision:
2:dfc8b09b4e3b
Parent:
SRF02_IF.cpp@ 1:32c4dd194228
Child:
3:70c946ba29cc

File content as of revision 2:dfc8b09b4e3b:

#include "Srf0208IF.h"
#include "Thread.h"
#include "I2CMasterRtos.h"

#include "mbed.h"

using namespace mbed;
using namespace rtos;

bool Srf0208IF::triggerRanging()
{
    const char regNcmd[2]= {0x00,0x52};
    return !m_i2c.write(m_adr, regNcmd, 2);
}
int Srf0208IF::readTransitTime_us()
{
    char result[2];
    bool ok = !m_i2c.read(m_adr, 0x02, result, 2);
    printf("%d %d \n",result[0],result[1]);
    return ok ? twoByte2int(result) : -1;
}
void Srf0208IF::resetI2CAdress(int newAddress)
{
    char regNcmd[2];

    regNcmd[0]=0x00;

    regNcmd[1]=0xA0;
    m_i2c.write(m_adr,regNcmd,2);
    Thread::wait(50);

    regNcmd[1]=0xAA;
    m_i2c.write(m_adr,regNcmd,2);
    Thread::wait(50);

    regNcmd[1]=0xA5;
    m_i2c.write(m_adr,regNcmd,2);
    Thread::wait(50);

    regNcmd[1]=newAddress;
    m_i2c.write(m_adr,regNcmd,2);
    Thread::wait(50);
}
int Srf0208IF::readSWRevision()
{
    char swRev;
    bool ok = !m_i2c.read(m_adr, 0x00, &swRev, 1);
    return ok && swRev!=0xff ? swRev : -1;
}



bool Srf02IF::triggerPing()
{
    const char regNcmd[2]= {0x00,0x5C};
    return !m_i2c.write(m_adr, regNcmd, 2);
}
bool Srf02IF::triggerEchoMeasurement()
{
    const char regNcmd[2]= {0x00,0x58};
    return !m_i2c.write(m_adr, regNcmd, 2);
}
int Srf02IF::readMinimalTransitTime_us()
{
    char result[2];
    bool ok = !m_i2c.read(m_adr, 0x04, result, 2);
    return ok ? twoByte2int(result) : -1;
}



int Srf08IF::readBrightness()
{
    char val;
    bool ok = !m_i2c.read(m_adr, 0x01, &val, 1);
    return ok ? val : -1;
}
bool Srf08IF::triggerANNRanging()
{
    const char regNcmd[2]= {0x00,0x55};
    return !m_i2c.write(m_adr, regNcmd, 2);
}
bool Srf08IF::writeMaxDist(int maxDst)
{
    char regNcmd[2];
    regNcmd[0] = 0x02;
    regNcmd[0] = (char)maxDst;
    return !m_i2c.write(m_adr, regNcmd, 2);
}
bool Srf08IF::writeMaxGain(int maxGain)
{
    char regNcmd[2];
    regNcmd[0] = 0x01;
    regNcmd[0] = (char)maxGain;
    return !m_i2c.write(m_adr, regNcmd, 2);
}
bool Srf08IF::burstRead(int startReg, int stopReg)
{
    if(startReg<0)startReg=0;
    if(stopReg>35)stopReg=35;
    return !m_i2c.read(m_adr, startReg, &(m_rawBuffer[startReg]), stopReg-startReg+1);
}