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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Srf0208IFTest02.h Source File

Srf0208IFTest02.h

00001 #include "Srf0208IF.h"
00002 #include "I2CMasterRtos.h"
00003 #include "Serial.h"
00004 #include "us_ticker_api.h"
00005 #include "Thread.h"
00006 #include "math.h"
00007 
00008 using namespace mbed;
00009 using namespace rtos;
00010 
00011 I2CMasterRtos i2c(p28, p27,100000);
00012 
00013 Srf08IF srf08(0xe0,i2c);
00014 Srf02IF srf02(0xe6,i2c);
00015 
00016 int doit()
00017 {
00018     Thread::wait(1000);
00019     printf("\n\n\n########### STARTING ###############\n\n\n");
00020     Thread::wait(1000);
00021 
00022     if(0) { // reset i3c addresses
00023         Srf02IF srf(0xe0,i2c);
00024         srf.resetI2CAdress(0xe6);
00025         return 0;
00026     }
00027 
00028 
00029     while(1) {
00030         int t0 = us_ticker_read();
00031         srf02.triggerEchoMeasurement();
00032         int t1 = us_ticker_read();
00033         srf08.triggerRanging();
00034         //srf08.triggerANNRanging();
00035         int t2 = us_ticker_read();
00036 
00037         Thread::wait(100);
00038         //while(!(srf08.rangingCompleted() && srf02.rangingCompleted())) printf(".");
00039         //while(!(srf02.rangingCompleted())) printf(".");
00040         //printf("\n");
00041 
00042         int d02=srf02.readDistance_mm();
00043         int d08=srf08.readDistance_mm();
00044         srf08.burstRead();
00045 
00046 
00047         int l08=srf08.getBrightnessFromRawBuffer();
00048         const int echos = 5;
00049         printf("l=%d  d08=%d  d02=%d ",l08,d08,d02);
00050         for(int i=0; i<echos; ++i) printf("D%d=%d ",i,srf08.getDistanceFromRawBuffer_mm(i));
00051         //printf("\n");
00052 
00053         int t02a = srf02.readTransitTime_us();
00054         int t08 = srf08.readTransitTime_us();
00055         int ok = srf02.triggerRanging();
00056         Thread::wait(100);
00057         int t02b = srf02.readTransitTime_us();
00058         int dmin = srf02.readMinimalDistance_mm();
00059         int t02c = t02a-(t2-t1);
00060         printf("      dt08m=%d d02m=%d d02c=%d dt02mc=%d ds0208=%d     dmin=%d\n",
00061                Srf0208IF::time2dist_us2mm(t08),
00062                Srf0208IF::time2dist_us2mm(t02b),
00063                Srf0208IF::time2dist_us2mm(t02c)-130,
00064                Srf0208IF::time2dist_us2mm(t02b-t02c),
00065                Srf0208IF::time2dist_us2mm(t08-t02b),
00066                dmin);
00067         Thread::wait(100);
00068         /*
00069         srf08.triggerANNRanging();
00070         Thread::wait(100);
00071         srf08.burstRead();
00072         printf("d=%d   ",srf08.getDistanceFromRawBuffer_mm(0));
00073         const int slots=32;
00074         for(int i=0; i<slots; ++i) printf("%d ",srf08.getANNSlotDataFromRawBuffer(i));
00075         printf("\n");
00076         */
00077         Thread::wait(100);
00078     }
00079 }