Interface library for the Devantech SRF02/SRF08 ultrasonic i2c rangers. Depends on I2cRtosDriver lib!
Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Tue Jul 12 2022 20:48:48 by 1.7.2