久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
智能小車CCD程序
[打印本頁]
作者:
3443896565
時間:
2017-4-10 17:45
標(biāo)題:
智能小車CCD程序
這個為CCD是鏡頭程序,CCD看到的為一條線非攝像頭看到的矩陣面
0.png
(48.92 KB, 下載次數(shù): 85)
下載附件
2017-4-11 19:34 上傳
下載:
CCD.rar
(1.73 KB, 下載次數(shù): 15)
2017-4-10 17:43 上傳
點(diǎn)擊文件名下載附件
CCD
下載積分: 黑幣 -5
程序預(yù)覽:
#include "CCD.h"
#define CCD_CLK_PORT PTE4 //CLK 引腳定義
#define CCD_SI_PORT PTE5 //SI 引腳定義
#define AD_CHANNEL1 ADC0_SE8 //通道1
#define AD_CHANNEL2 ADC0_SE9 //通道2
#define EXPOSURE_TIME 10 //CCD曝光時間
#define CCD_CLK(x) gpio_set (CCD_CLK_PORT, x)
#define CCD_SI(x) gpio_set (CCD_SI_PORT, x)
uint16 ccd_data1[128]; //CCD1數(shù)據(jù)
uint16 ccd_data2[128]; //CCD2數(shù)據(jù)
uint16 flag0,flag1,flag2,flag3;
void ccd_init(void)
{
adc_init (AD_CHANNEL1);
adc_init (AD_CHANNEL2);
gpio_init(CCD_CLK_PORT,GPO,1); //CLK
gpio_init(CCD_SI_PORT,GPO,1); //SI
port_init_NoALT (CCD_CLK_PORT,PULLUP );
port_init_NoALT (CCD_SI_PORT,PULLUP );
DisableInterrupts;
pit_init(PIT0, EXPOSURE_TIME*bus_clk_khz); //定時 100000 個bus時鐘 后中斷
set_vector_handler(PIT0_VECTORn,pit_hander); //設(shè)置中斷復(fù)位函數(shù)到中斷向量表里
enable_irq(PIT0_IRQn); //使能PIT0中斷
EnableInterrupts;
}
//CCD數(shù)據(jù)采集
void ccd_collect(void)
{
uint16 i = 0;
CCD_CLK(1);
CCD_SI(0);
CCD_SI(1);
CCD_CLK(0);
CCD_CLK(1);
CCD_SI(0);
for(i=0;i<128;i++)
{
CCD_CLK(0);
ccd_data1[i] = adc_once(AD_CHANNEL1, ADC_12bit)>>1;
ccd_data2[i] = adc_once(AD_CHANNEL2, ADC_12bit)>>1;
CCD_CLK(1);
}
}
int16 calc_diff(int16 x, int16 y)
{
return(int16)((long)(x-y)*100/(x+y));
}
uint8 flag_left_valid1 = 0, flag_right_valid1 = 0;
uint8 ccd_left1 = 64, ccd_right1 = 64;
uint8 ccd_left1_old = 64, ccd_right1_old = 64;
int16 position1 = 0; int16 position_old1 = 0;
uint8 efct_width1 = 0;
uint8 real_width1 = 0;
uint8 real_width1_old = 0;
//搜索的位置
uint8 left_start1 ,left_end1;
uint8 right_start1,right_end1;
void search_line1(void)
{
int16 i;
//確定搜索范圍
left_start1 = position1 + 64;
if(left_start1<10) left_start1 = 10;
left_end1 = 5;
right_start1 = position1 + 64;
if(right_start1>117) right_start1 = 117;
right_end1 = 122;
//清除該行標(biāo)志位
flag_left_valid1 = 0;
flag_right_valid1 = 0;
//search left
ccd_left1 = 5;
for(i=left_start1; i>=left_end1; i--)
{
if(calc_diff(ccd_data1[i],ccd_data1[i-5])>30)
{
flag_left_valid1 = 1;ccd_left1 = i-5;ccd_left1_old=ccd_left1;
break;
}
}
//search right
ccd_right1 = 122;
for(i=right_start1; i<=right_end1; i++)
{
if(calc_diff(ccd_data1[i],ccd_data1[i+5])>30)
{
flag_right_valid1 = 1;ccd_right1 = i+5;ccd_right1_old=ccd_right1;
break;
}
}
//修正邊界
if(flag_left_valid1 && !flag_right_valid1)
{
if( ((2*ccd_left1 + efct_width1)/2 - 64) <0) flag_left_valid1 = 0;
position1 = 0;
}
if(!flag_left_valid1 && flag_right_valid1)
{
if( ((2*ccd_right1 - efct_width1)/2 - 64) >0) flag_right_valid1 = 0;
position1 = 0;
}
//計算有效寬度
if(flag_left_valid1 && flag_right_valid1)efct_width1 = ccd_right1 - ccd_left1;
//計算真實(shí)寬度
real_width1 = ccd_right1 - ccd_left1;
//計算坐標(biāo)
if(flag_left_valid1 && flag_right_valid1) position1 = (ccd_left1 + ccd_right1)/2 - 64;
else if(flag_left_valid1 && !flag_right_valid1) position1 = (2*ccd_left1 + efct_width1)/2 - 64;
else if(!flag_left_valid1 && flag_right_valid1) position1 = (2*ccd_right1 - efct_width1)/2 - 64;
ccd_left1_old = ccd_left1;
ccd_right1_old = ccd_right1;
real_width1_old = real_width1;
//存儲邊界用于下次搜線確定邊界
}
uint8 flag_left_valid2 = 0, flag_right_valid2 = 0;
uint8 ccd_left2 = 64, ccd_right2 = 64;
uint8 ccd_left2_old = 64, ccd_right2_old = 64;
int16 position2 = 0;
uint8 efct_width2 = 0;
uint8 real_width2 = 0;
uint8 real_width2_old = 0;
//搜索的位置
uint8 left_start2 ,left_end2;
uint8 right_start2,right_end2;
void search_line2(void)
{
int16 i;
//確定搜索范圍
left_start2 = position2 + 64;
if(left_start2<10) left_start2 = 10;
left_end2 = 5;
right_start2 = position2 + 64;
if(right_start2>117) right_start2 = 117;
right_end2 = 122;
//清除該行標(biāo)志位
flag_left_valid2 = 0;
flag_right_valid2 = 0;
//search left
ccd_left2 = 5;
for(i=left_start2; i>=left_end2; i--)
{
if(calc_diff(ccd_data2[i],ccd_data2[i-5])>30)
{
flag_left_valid2 = 1;ccd_left2 = i-5;ccd_left2_old=ccd_left2;
break;
}
}
//search right
ccd_right2 = 122;
for(i=right_start2; i<=right_end2; i++)
{
if(calc_diff(ccd_data2[i],ccd_data2[i+5])>30)
{
flag_right_valid2 = 1;ccd_right2 = i+5;ccd_right2_old=ccd_right2;
break;
}
}
//修正邊界
if(flag_left_valid2 && !flag_right_valid2)
{
if( ((2*ccd_left2 + efct_width2)/2 - 64) <0) flag_left_valid2 = 0;
position2 = 0;
}
if(!flag_left_valid2 && flag_right_valid2)
{
if( ((2*ccd_right2 - efct_width2)/2 - 64) >0)
flag_right_valid2 = 0;position2 = 0;
}
//計算有效寬度
if(flag_left_valid2 && flag_right_valid2)efct_width2 = ccd_right2 - ccd_left2;
//計算真實(shí)寬度
real_width2 = ccd_right2 - ccd_left2;
//計算坐標(biāo)
if(flag_left_valid2 && flag_right_valid2) position2 = (ccd_left2 + ccd_right2)/2 - 64;
else if(flag_left_valid2 && !flag_right_valid2) position2 = (2*ccd_left2 + efct_width2)/2 - 64;
else if(!flag_left_valid2 && flag_right_valid2) position2 = (2*ccd_right2 - efct_width2)/2 - 64;
//存儲邊界用于下次搜線確定邊界
ccd_left2_old = ccd_left2;
ccd_right2_old = ccd_right2;
real_width2_old = real_width2;
}
int16 position = 0;
int16 k1,k2;
void calc_road(void)
{
search_line1(); //搜線
search_line2();
k1 = real_width1 - 36;
if(k1>45) {k1 = 20; k2 = 80;}
else if(k1<=0) {k1 = 100;k2 = 0;}
else if(k1<-10) {k1 = 100; k2 = 0;}
else
{
k1 = k1 * 3/2;
k1 = 100 - k1;
k2 = 100 - k1;
}
//k1 = 100;
//k2 = 0;
if(real_width1>100&&real_width2>100)
position = 2;
else
position = position1*k1/100 + position2*k2/100;
}
復(fù)制代碼
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
毛片免费观看视频
|
亚洲精品在线免费观看视频
|
精品免费国产
|
久久久精品一区
|
精品视频一区二区
|
五月天激情综合网
|
日韩av高清在线
|
欧美大片一区二区
|
精品一区二区三区在线视频
|
亚洲啊v在线
|
亚洲人a
|
亚洲国产精品成人无久久精品
|
国产精品视频一
|
日本激情视频在线播放
|
美国黄色一级片
|
羞羞视频网站在线观看
|
日韩欧美中文字幕在线观看
|
国产精品久久久久久av公交车
|
国产精品精品视频一区二区三区
|
亚洲成av人影片在线观看
|
精品久久久久久久久久久久久久
|
成人三级在线播放
|
日韩福利在线
|
国产精品综合网
|
国产精品国产成人国产三级
|
欧美日韩在线观看一区
|
日韩视频一区在线观看
|
中国大陆高清aⅴ毛片
|
国产精品久久久久久久毛片
|
国产欧美日韩在线播放
|
五月综合激情在线
|
中文字幕av亚洲精品一部二部
|
国产成人精品一区二区三区网站观看
|
国产ts人妖系列高潮
|
成人午夜网站
|
亚洲综合一区二区三区
|
日韩成人在线免费视频
|
亚洲国产69
|
91精品国产一区二区三区
|
亚洲国产精品久久久久婷婷老年
|
亚洲精选一区
|