AVGG

Dependencies:   mbed

Fork of 7_7Boboobooo by 譯文 張

camera_api.cpp

Committer:
physicsgood
Date:
2014-07-07
Revision:
6:b046d6ff3745
Parent:
5:e32b091aa1fb
Child:
7:f04bde0ca846

File content as of revision 6:b046d6ff3745:

#include "mbed.h"
#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);

     }
 
int BX_camera::black_centerR(void){
       
    int black_R_left = 0;
    for(int i = 120; i >=8; i--){
        if(sign_line_imageR[i] == 'O' && sign_line_imageR[i-1] == ' ' && sign_line_imageR[i-2] == ' '){
            return i;
        }
    } 
    return black_R_left;
    
         

    
}




int BX_camera::black_centerL(void){
         
     int black_L_right = 128;
     for(int i = 8; i <121 ; i++){
        if(sign_line_imageL[i] == 'O' && sign_line_imageL[i+1] == ' ' && sign_line_imageL[i+2] == ' '){
            return i;
        }
    }
    return black_L_right;
     
     
    
          
                 
     
 
 }
 

 
 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'; 
                 }     
                 
           
          }
           
           
           
           }