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

Srf0208IFTest02.h

Committer:
humlet
Date:
2013-06-01
Revision:
3:70c946ba29cc

File content as of revision 3:70c946ba29cc:

#include "Srf0208IF.h"
#include "I2CMasterRtos.h"
#include "Serial.h"
#include "us_ticker_api.h"
#include "Thread.h"
#include "math.h"

using namespace mbed;
using namespace rtos;

I2CMasterRtos i2c(p28, p27,100000);

Srf08IF srf08(0xe0,i2c);
Srf02IF srf02(0xe6,i2c);

int doit()
{
    Thread::wait(1000);
    printf("\n\n\n########### STARTING ###############\n\n\n");
    Thread::wait(1000);

    if(0) { // reset i3c addresses
        Srf02IF srf(0xe0,i2c);
        srf.resetI2CAdress(0xe6);
        return 0;
    }


    while(1) {
        int t0 = us_ticker_read();
        srf02.triggerEchoMeasurement();
        int t1 = us_ticker_read();
        srf08.triggerRanging();
        //srf08.triggerANNRanging();
        int t2 = us_ticker_read();

        Thread::wait(100);
        //while(!(srf08.rangingCompleted() && srf02.rangingCompleted())) printf(".");
        //while(!(srf02.rangingCompleted())) printf(".");
        //printf("\n");

        int d02=srf02.readDistance_mm();
        int d08=srf08.readDistance_mm();
        srf08.burstRead();


        int l08=srf08.getBrightnessFromRawBuffer();
        const int echos = 5;
        printf("l=%d  d08=%d  d02=%d ",l08,d08,d02);
        for(int i=0; i<echos; ++i) printf("D%d=%d ",i,srf08.getDistanceFromRawBuffer_mm(i));
        //printf("\n");

        int t02a = srf02.readTransitTime_us();
        int t08 = srf08.readTransitTime_us();
        int ok = srf02.triggerRanging();
        Thread::wait(100);
        int t02b = srf02.readTransitTime_us();
        int dmin = srf02.readMinimalDistance_mm();
        int t02c = t02a-(t2-t1);
        printf("      dt08m=%d d02m=%d d02c=%d dt02mc=%d ds0208=%d     dmin=%d\n",
               Srf0208IF::time2dist_us2mm(t08),
               Srf0208IF::time2dist_us2mm(t02b),
               Srf0208IF::time2dist_us2mm(t02c)-130,
               Srf0208IF::time2dist_us2mm(t02b-t02c),
               Srf0208IF::time2dist_us2mm(t08-t02b),
               dmin);
        Thread::wait(100);
        /*
        srf08.triggerANNRanging();
        Thread::wait(100);
        srf08.burstRead();
        printf("d=%d   ",srf08.getDistanceFromRawBuffer_mm(0));
        const int slots=32;
        for(int i=0; i<slots; ++i) printf("%d ",srf08.getANNSlotDataFromRawBuffer(i));
        printf("\n");
        */
        Thread::wait(100);
    }
}