全功能智能车之CCD增加自适应光照能力
其实就是增加了如下函数:
/*************************************************************************
* 函数名称:VerifyExposure
* 功能说明:曝光检验 自动选取最合适的曝光值
* 参数说明:
* 函数返回:无
* 修改时间:2015-11-28
× 作者:piaoran QQ:384710930
* 备 注:VerifyExposure();
*************************************************************************/
void VerifyExposure(void) {
u8 i,j,cnt_max,cnt_min;
s16 temp;
for(j=0;j<200;j++){ //最多调节100次
ImageCapture(Pixel); //获取图像
ccd_avg=PixelAverage(CCD_LENGTH,Pixel);
ccd_max=ccd_avg;
ccd_min=ccd_avg;
temp=exposureTime;
for(i=0;i<CCD_LENGTH;i++){
if(Pixel[i]>=(ccd_max-25)){
cnt_max++;
cnt_min=0;
if(cnt_max>=3) ccd_max=Pixel[i];
continue;
}
if(Pixel[i]<=(ccd_min+25)){
cnt_min++;
cnt_max=0;
if(ccd_min>=3) ccd_min=Pixel[i];
continue;
}
}
if(ccd_max<=2400) { //曝光不够
temp +=3;
if(temp>1000) temp=1000;
}
if(ccd_min>=1600) { //曝光过高
temp -=5;
if(temp<1) temp=1;
}
exposureTime=temp;
SendImageData(Pixel);
LCD_ShowxNum(20+8*8,70,ccd_max,4,16,0);//液晶显示
LCD_ShowxNum(20+22*8,70,ccd_min,4,16,0);
LCD_ShowxNum(20+8*8,90,exposureTime,4,16,0);
LCD_ShowxNum(20+22*8,90,ccd_avg,4,16,0);
delay_ms(50);
}
}
当然也完善了相应的功能,如取消了一个大数组,在发送函数做如下修改:
/*************************************************************************
* 函数名称:SendImageData
* 功能说明:
* 参数说明:
* 函数返回:无
* 修改时间:2015-11-28
× 作者:piaoran QQ:384710930
* 备 注:SendImageData(Pixel);
*************************************************************************/
void SendImageData(unsigned short * ImageData) {
unsigned char i,temp;
//0x00代表最暗,0xfe代表最亮 而采集回来的是12位的ADC值
for(i=0; i<CCD_LENGTH; i++) {
temp=(u8)(*ImageData>>4);
if(temp==0xff) temp=0xfe;
uart_putchar(USART1,temp);
ImageData++;
}
uart_putchar(USART1,0xff);
}
下面是实验图片:
可以卡到ccd_max和exposureTime都在上升,这就是自动调节曝光度的作用
下面是源代码:
http://download.csdn.net/detail/chengdong1314/9308725