QQQ

Dependencies:   mbed-rtos mbed

Fork of BX-car_s by Tony Lin

Revision:
6:5a39bde2e016
Parent:
5:e32b091aa1fb
Child:
7:fd976e1ced33
--- a/camera_api.cpp	Thu Jun 05 10:32:55 2014 +0000
+++ b/camera_api.cpp	Wed Jun 11 14:41:52 2014 +0000
@@ -2,347 +2,378 @@
 #include "camera_api.h"
 
 #define clk 2  //ms
- 
- BX_camera::BX_camera(void){
-     
-           line_CamR = new FastAnalogIn(PTD5);
-           line_CamL=   new FastAnalogIn(PTD6,0);  
-            cam_clk=new DigitalOut(PTE1);
-            si=new DigitalOut(PTD7);
+
+BX_camera::BX_camera(void)
+{
+
+    line_CamR = new FastAnalogIn(PTD5);
+    line_CamL=   new FastAnalogIn(PTD6,0);
+    cam_clk=new DigitalOut(PTE1);
+    si=new DigitalOut(PTD7);
+
+}
+
+int BX_camera::black_centerR(void)
+{
+
+    // find center
+    // case 1      //  |  //
+    // case 2       /  |  /
+
+    char find_type=0x00;
+
+    int b_end=0;
+    int b_start=0;
+
+    int b_w=0;
+
+
+    int b2_end=0;
+    int b2_start=0;
+
+    int b2_w=0;
+
+    int center;
+    int j=64;
+    bool f1=false;
+    bool f2=false;
+    bool f3=false;
+    bool f4=false;
+    int w_thr_up=32;
+    int w_thr_dn=0;
+
+    if(sign_line_imageR[64]==' ')
+        find_type=0x02;
+    else
+        find_type=0x01;
+
+
+    for(int i=64; i<128; i++,j--) {
+
+
+        switch(find_type) {
+
+
+            case 0x01:
 
-     }
- 
-int BX_camera::black_centerR(void){
-       
-         // find center 
-         // case 1      //  |  //
-         // case 2       /  |  /
-    
-     char find_type=0x00;
-     
-     int b_end=0;
-     int b_start=0;
-     
-     int b2_end=0;
-     int b2_start=0;
-     
-     
-     int center;
-     int j=64;
-     bool f1=false;
-     bool f2=false;
-     bool f3=false;
-     bool f4=false;
+                if(f1==false&&sign_line_imageR[i]==' ') {
+                    if(f1==false) {
+                        b_start=i;
+                        f1=true;
+                    }
+
+                }
+                if(f1== true&& f2==false&&sign_line_imageR[i]=='O') {
+                    if(f2==false) {
+                        b_end=i-1;
+                        f2=true;
+                    }
+
+                }
+
+                if(f3==false&&sign_line_imageR[j]==' ') {
+                    if(f3==false) {
+                        b2_end=j;
+                        f3=true;
+                    }
+
+                }
+                if(f3==true&&f4==false&&sign_line_imageR[j]=='O') {
+                    if(f4==false) {
+                        b2_start=j-1;
+                        f4=true;
+                    }
+
+                }
+
+
+                break;
+
+
+            case 0x02:
+
+                if(sign_line_imageR[i]=='O') {
+
+                    if(f1==false) {
+                        b_end=i;
+                        f1=true;
+                    }
+                }
+
+                if(sign_line_imageR[j]=='O') {
+
+                    if(f2==false) {
+                        b_start=j;
+                        f2=true;
+                    }
+
+                }
+
+
+                break;
+
+        }
+
+
+    }
+
+    b_w=b_start-b_end;
+    b2_w=b2_start-b2_end;
     
-         
-            if(sign_line_imageR[64]==' ')
-              find_type=0x02;
-            else
-              find_type=0x01;  
-            
-          
-           for(int i=64;i<128; i++,j--){
-               
-                
-               switch(find_type){
-                   
-                   
-                   case 0x01:
-                       
-                         if(f1==false&&sign_line_imageR[i]==' '){ 
-                                  if(f1==false){
-                                      b_start=i;
-                                      f1=true;
-                                  }
-                                  
-                         }
-                         if(f1== true&& f2==false&&sign_line_imageR[i]=='O'){ 
-                                  if(f2==false){
-                                      b_end=i-1;
-                                      f2=true;
-                                  }
-                                  
-                         }
-                         
-                         if(f3==false&&sign_line_imageR[j]==' '){ 
-                                  if(f3==false){
-                                      b2_end=j;
-                                      f3=true;
-                                  }
-                                  
-                         }
-                         if(f3==true&&f4==false&&sign_line_imageR[j]=='O'){ 
-                                  if(f4==false){
-                                      b2_start=j-1;
-                                      f4=true;
-                                  }
-                                  
-                         }
-                         
-                   
-                   break;
-                   
-                   
-                   case 0x02:
-                   
-                         if(sign_line_imageR[i]=='O'){         
-                    
-                                  if(f1==false){
-                                      b_end=i;
-                                      f1=true;
-                                  }
-                         }  
-                    
-                         if(sign_line_imageR[j]=='O'){
-                        
-                                   if(f2==false){
-                                       b_start=j;     
-                                      f2=true;
-                                  }
-       
-                        }
-                   
-                   
-                   break;    
-      
-               }
-        
-               
-           }
-       
-            
-          switch(find_type){
-         
-             case 0x01:
-                
-               if((b_end-b_start)>(b2_end-b2_start)    )
-                     center=(b_end+b_start)/2;
-                     
-               else  
-                     center=(b2_end+b2_start)/2;
-             break;
-             
-             case 0x02:
-               center=(b_end+b_start)/2;
-              
-             break;
-         }
+    debugV=b_start;
+    debugV2=b_end;
     
-    
-      return center;
-    
+
+    switch(find_type) {
+
+        case 0x01:
+
+
+
+
+
+            if( ( w_thr_up- (b_w))>0  &&( ( w_thr_up- (b_w)) < (w_thr_up-(b2_w)) )           ) {
+                center=(b_end+b_start)/2;
+
+
+
+            } else if( ( w_thr_up- (b2_w) )>0 ) {
+                center=(b2_end+b2_start)/2;
+            } else {
+
+                center=65;
+
+                //????????????????
+
+            }
+
+
+            break;
+
+        case 0x02:
+            center=(b_end+b_start)/2;
+
+
+            break;
     }
 
 
+    return center;
+
+}
+
+
 
 
-int BX_camera::black_centerL(void){
-         
-         // find center 
-         // case 1      //  |  //
-         //case 2         / |  /
-         
-         
-     char find_type=0x00;
-     
-     int b_end=0;
-     int b_start=0;
-     int b2_end=0;
-     int b2_start=0;
-     
-     
-     int center;
-     int j=64;
-     bool f1=false;
-     bool f2=false;
-     bool f3=false;
-     bool f4=false;
+int BX_camera::black_centerL(void)
+{
+
+    // find center
+    // case 1      //  |  //
+    //case 2         / |  /
+
+
+    char find_type=0x00;
+
+    int b_end=0;
+    int b_start=0;
+    int b2_end=0;
+    int b2_start=0;
+
+
+    int center;
+    int j=64;
+    bool f1=false;
+    bool f2=false;
+    bool f3=false;
+    bool f4=false;
+
+    if(sign_line_imageL[64]==' ')
+        find_type=0x02;
+    else
+        find_type=0x01;
+
+
+    for(int i=64; i<128; i++,j--) {
+
+
+        switch(find_type) {
+
+
+            case 0x01:
+
+                if(f1==false&&sign_line_imageL[i]==' ') {
+                    if(f1==false) {
+                        b_start=i;
+                        f1=true;
+                    }
+
+                }
+                if(f1== true&& f2==false&&sign_line_imageL[i]=='O') {
+                    if(f2==false) {
+                        b_end=i-1;
+                        f2=true;
+                    }
+
+                }
 
-            if(sign_line_imageL[64]==' ')
-              find_type=0x02;
+                if(f3==false&&sign_line_imageL[j]==' ') {
+                    if(f3==false) {
+                        b2_end=j;
+                        f3=true;
+                    }
+
+                }
+                if(f3==true&&f4==false&&sign_line_imageL[j]=='O') {
+                    if(f4==false) {
+                        b2_start=j-1;
+                        f4=true;
+                    }
+
+                }
+
+                break;
+
+
+            case 0x02:
+
+                if(sign_line_imageL[i]=='O') {
+
+                    if(f1==false) {
+                        b_end=i;
+                        f1=true;
+                    }
+                }
+
+                if(sign_line_imageL[j]=='O') {
+
+                    if(f2==false) {
+                        b_start=j;
+                        f2=true;
+                    }
+
+                }
+
+
+                break;
+
+        }
+
+    }
+
+
+    switch(find_type) {
+
+        case 0x01:
+
+            if((b_end-b_start)>(b2_end-b2_start)    )
+                center=(b_end+b_start)/2;
+
             else
-              find_type=0x01;  
-            
-           
-           for(int i=64;i<128; i++,j--){
-               
-                
-               switch(find_type){
-                   
-                   
-                   case 0x01:
-                       
-                         if(f1==false&&sign_line_imageL[i]==' '){ 
-                                  if(f1==false){
-                                      b_start=i;
-                                      f1=true;
-                                  }
-                                  
-                         }
-                         if(f1== true&& f2==false&&sign_line_imageL[i]=='O'){ 
-                                  if(f2==false){
-                                      b_end=i-1;
-                                      f2=true;
-                                  }
-                                  
-                         }
-                         
-                         if(f3==false&&sign_line_imageL[j]==' '){ 
-                                  if(f3==false){
-                                      b2_end=j;
-                                      f3=true;
-                                  }
-                                  
-                         }
-                         if(f3==true&&f4==false&&sign_line_imageL[j]=='O'){ 
-                                  if(f4==false){
-                                      b2_start=j-1;
-                                      f4=true;
-                                  }
-                                  
-                         }
-                                    
-                   break;
-                   
-                   
-                   case 0x02:
-                   
-                         if(sign_line_imageL[i]=='O'){         
-                    
-                                  if(f1==false){
-                                      b_end=i;
-                                      f1=true;
-                                  }
-                         }  
-                    
-                         if(sign_line_imageL[j]=='O'){
-                        
-                                   if(f2==false){
-                                       b_start=j;     
-                                      f2=true;
-                                  }
-       
-                        }
-                   
-                   
-                   break;               
-                   
-               }
-         
-           }
-       
-            
-          switch(find_type){
-         
-             case 0x01:
-                
-               if((b_end-b_start)>(b2_end-b2_start)    )
-                     center=(b_end+b_start)/2;
-                     
-               else  
-                     center=(b2_end+b2_start)/2;             
-             break;
-             
-             case 0x02:
-               center=(b_end+b_start)/2;
-              
-             break;
-         }
- 
+                center=(b2_end+b2_start)/2;
+            break;
+
+        case 0x02:
+            center=(b_end+b_start)/2;
+
+            break;
+    }
+
     return center;
- 
- }
- 
+
+}
+
+
+
+void BX_camera::read(void)
+{
+
+    w_f_vL=0x0000;
+    b_f_vL=0xffff;
+
+    w_f_vR=0x0000;
+    b_f_vR=0xffff;
+
+
+
+
+    *si=1;
+    *cam_clk=1;
+
+    wait_us(30);   // tune here
+    *si=0;
+    *cam_clk=0;
+
+
+
+    line_CamR->enable();
+    line_CamL->enable();
+
+
+    //input 128 //both
+
+    for(int i=0; i<128; i++) {
+        *cam_clk=1;
+        wait_us(5);
+
+
+        line_imageR[i]=line_CamR->read_u16();
+        line_imageL[i]=line_CamL->read_u16();
 
- 
- void BX_camera::read(void){
- 
-          w_f_vL=0x0000;
-          b_f_vL=0xffff;
-   
-          w_f_vR=0x0000;
-          b_f_vR=0xffff;
- 
- 
-        
-           
-           *si=1;
-           *cam_clk=1;
-           
-           wait_us(30);   // tune here
-           *si=0;
-           *cam_clk=0;
-            
-            
- 
-          line_CamR->enable();
-          line_CamL->enable();
-          
-          
-       //input 128 //both  
-          
-          for(int i=0;i<128;i++){     
-              *cam_clk=1;   
-              wait_us(5);
-             
-             
-             line_imageR[i]=line_CamR->read_u16();
-             line_imageL[i]=line_CamL->read_u16();
-         
-         //  big small    
-             if(line_imageR[i] > w_f_vR) 
-                w_f_vR=line_imageR[i];
-             else if(line_imageR[i] < b_f_vR )
-                b_f_vR = line_imageR[i];
-                
-                
-              if(line_imageL[i] > w_f_vL) 
-                w_f_vL=line_imageL[i];
-             else if(line_imageL[i] < b_f_vL )
-                b_f_vL = line_imageL[i];   
-                
-             
-             
-             
-             *cam_clk=0;
-             wait_us(5);
-        
-           
-           }
-           
-           
-          line_CamR->enable();
-          line_CamL->enable();
-           
-           
-           //filter L R   //may change
-           
-          for(int i=0;i<128;i++){   
-           
-           
-               if( (line_imageR[i]-b_f_vR) < (w_f_vR - line_imageR[i] )    ) 
-                   sign_line_imageR[i]=' ';
-               else
-                   sign_line_imageR[i]='O';    
-           
-             
-               if( (line_imageL[i]-b_f_vL) < (w_f_vL - line_imageL[i] )    ) 
-                   sign_line_imageL[i]=' ';
-               else
-                   sign_line_imageL[i]='O';    
-           
-           
-                 
-                 
-                 
-                 if(i==0){
-                   sign_line_imageR[i]='X';
-                   sign_line_imageL[i]='X'; 
-                 }     
-                 
-           
-          }
-           
-           
-           
-           }
\ No newline at end of file
+        //  big small
+        if(line_imageR[i] > w_f_vR)
+            w_f_vR=line_imageR[i];
+        else if(line_imageR[i] < b_f_vR )
+            b_f_vR = line_imageR[i];
+
+
+        if(line_imageL[i] > w_f_vL)
+            w_f_vL=line_imageL[i];
+        else if(line_imageL[i] < b_f_vL )
+            b_f_vL = line_imageL[i];
+
+
+
+
+        *cam_clk=0;
+        wait_us(5);
+
+
+    }
+
+
+    line_CamR->enable();
+    line_CamL->enable();
+
+
+    //filter L R   //may change
+
+    for(int i=0; i<128; i++) {
+
+
+        if( (line_imageR[i]-b_f_vR) < (w_f_vR - line_imageR[i] )    )
+            sign_line_imageR[i]=' ';
+        else
+            sign_line_imageR[i]='O';
+
+
+        if( (line_imageL[i]-b_f_vL) < (w_f_vL - line_imageL[i] )    )
+            sign_line_imageL[i]=' ';
+        else
+            sign_line_imageL[i]='O';
+
+
+
+
+
+        if(i==0) {
+            sign_line_imageR[i]='X';
+            sign_line_imageL[i]='X';
+        }
+
+
+    }
+
+
+
+}
\ No newline at end of file