小車攝像頭尋線程序C語言編寫_第1頁
小車攝像頭尋線程序C語言編寫_第2頁
小車攝像頭尋線程序C語言編寫_第3頁
小車攝像頭尋線程序C語言編寫_第4頁
小車攝像頭尋線程序C語言編寫_第5頁
已閱讀5頁,還剩14頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、#include include.h#include math.huint8 SCI_Finish_Flag=0;uint8 DMA_Finish_Flag=0;unsigned char L_BlackEndL=0;unsigned char L_BlackEndM=0;unsigned char L_BlackEndR=0;unsigned char LL_BlackEndL=0;unsigned char LL_BlackEndM=0;unsigned char LL_BlackEndR=0;unsigned char *Source_image;unsigned int Time;un

2、signed char Cross_Time;unsigned char Cross_flag;unsigned char FaChe=0;unsigned char kai_Start_Line=0;void Cross_Stop(void) if(Cross_flag=1) Cross_Time+; if(Cross_Time75) Cross_flag=0; void Start_TwoMiao(void) static unsigned char i=0; if(FaChe=1&Work_Mode=1) if(i150) FaChe=0; Work_Mode=0; /Motor_PWM

3、=1500; Motor_Base=Speed_Base; void main(void) /uint32 count=0; /uint8 j=0,a=0; /uint16 ADValue; /unsigned char cross_Recognition=0; DisableInterrupts; All_Init(); EnableInterrupts; enable_irq(87);/使能A口中斷 ,A24場中斷 enable_irq(90);/使能D口中斷 ,D6,D7 enable_irq(68);/定時器0 enable_irq(69);/定時器1 LED_P8x16Str(0,0

4、,000); Excursion=0; Per_E=0; Last_Per_E=0; Motor_PWM=0; Time=0; Cross_Time=0; Cross_flag=0; / if(gpio_get(PORTA,14)=1 & gpio_get(PORTA,16)=1 ) /保守速度/ / Speed_Max=135;/ Speed_Min=125;/ straight_Speed=135;/ / else if(gpio_get(PORTA,14)=0 & gpio_get(PORTA,16)=1 ) /最大速度/ / Speed_Max=160;/ Speed_Min=90;/

5、 straight_Speed=140;/ / else if(gpio_get(PORTA,14)=0 & gpio_get(PORTA,16)=0 ) /中檔速度/ / Speed_Max=150;/ Speed_Min=140;/ straight_Speed=140;/ / else if(gpio_get(PORTA,14)=0 & gpio_get(PORTA,16)=0 )/ / Speed_Max=150;/ Speed_Min=110;/ straight_Speed=150;/ for(;) /cross_Recognition=0; #if Control_one if(

6、DMA_Finish_Flag=0) /DMA傳輸完成 /gpio_ctrl(PORTA,16,1); /Servo_PWM=5350; SCI_Finish_Flag=1; Denoising(uc_FrameBuffer_Even0); /去噪 EdgeDetection(uc_FrameBuffer_Even0,EdgeData0); /提取邊緣 Get_Edge(uc_FrameBuffer_Even0); /求邊緣 /SCI(); if(XuXian_Flag=1) /XuXian_Find(uc_FrameBuffer_Even0); /SCI(); if(White_Row_En

7、d!=IMAGE_ROW-1 & White_Row_End10) Cross_Connect(); /SCI(); Edge_Filtering(); /邊緣濾波 Edge_Repair(); Cross(1); /SCI(); / if(cross_Recognition!=1) / Repair_Edge(); / New_Control(); /Servo_PWM=5450; /Servo_PWM=4600; /Servo_PWM=6300; if(Work_Mode=0) /Motor_Control(); Motor_PWM=2000; /Key(); SCI(); /Projec

8、t(); /gpio_ctrl(PORTA,16,0); AT_LED_P8x16Str(30,0,L_Edge_Zero_StartRow1); AT_LED_P8x16Str(62,0,L_Edge_Zero_End1); AT_LED_P8x16Str(30,2,R_Edge_Zero_StartRow1); AT_LED_P8x16Str(62,2,R_Edge_Zero_End1); AT_LED_P8x16Str(104,2,(L_Edge_Zero_StartRow1+L_Edge_Zero_End1)/2); AT_LED_P8x16Str(104,4,(R_Edge_Zero

9、_StartRow1+R_Edge_Zero_End1)/2); AT_LED_P8x16Str_4w_int(0,4,L_Inflexion_Slope_Value); AT_LED_P8x16Str_4w_int(48,4,Left_Inflexion_Point); AT_LED_P8x16Str_4w_int(0,6,R_Inflexion_Slope_Value); AT_LED_P8x16Str_4w_int(48,6,Right_Inflexion_Point); AT_LED_P8x16Str(104,0,XuXian_Flag); AT_LED_P8x16Str(104,6,

10、Find_Base_Edge_Flag); SCI_Finish_Flag=0; DMA_Finish_Flag=2; #elif Control_two if(ImageOverEven=TRUE) /AT_LED_P8x16Str_4w(48,6,ADValue); Source_image=uc_FrameBuffer_Even0; /gpio_ctrl(PORTA,16,1); Denoising(uc_FrameBuffer_Even0); /去噪 EdgeDetection(uc_FrameBuffer_Even0,EdgeData0); /提取邊緣 Get_Edge(uc_Fra

11、meBuffer_Even0); /求邊緣 if(XuXian_Flag=1) /XuXian_Find(uc_FrameBuffer_Even0); if(White_Row_End!=IMAGE_ROW-1 & White_Row_End10) Cross_Connect(); Edge_Filtering(); /邊緣濾波 Edge_Repair(); Cross(1); /if(cross_Recognition!=1) / Repair_Edge(); / /Cross_Stop(); New_Control(); if(Work_Mode=0) Motor_Control(); /

12、Motor_PWM=1400; /Motor_PWM=DJ; Key(); Start_TwoMiao(); /Project(); /SCI(); /SCI傳輸 ImageOverEven=FALSE; /gpio_ctrl(PORTA,16,0); else if(ImageOverOdd=TRUE) /gpio_ctrl(PORTA,16,1); Source_image=uc_FrameBuffer_Odd0; Denoising(uc_FrameBuffer_Odd0); /去噪 EdgeDetection(uc_FrameBuffer_Odd0,EdgeData0); /提取邊緣

13、Get_Edge(uc_FrameBuffer_Odd0); /求邊緣 if(XuXian_Flag=1) /XuXian_Find(uc_FrameBuffer_Even0); if(White_Row_End!=IMAGE_ROW-1 & White_Row_End10) Cross_Connect(); Edge_Filtering(); /邊緣濾波 Edge_Repair(); Cross(1); /if(cross_Recognition!=1) / Repair_Edge(); / /Cross_Stop(); New_Control(); if(Work_Mode=0) Moto

14、r_Control(); /Motor_PWM=1400; /Motor_PWM=DJ; Key(); Start_TwoMiao(); /Project(); /SCI(); ImageOverOdd=FALSE; /gpio_ctrl(PORTA,16,0); #elif Control_three /1 主程序使用的變量定義 uint32 runcount;/運行計數器 uint16 ADValue; /2 關中斷 DisableInterrupts; /禁止總中斷 /3 模塊初始化 light_init(Light_Run_PORT,Light_Run1,Light_OFF); /指示

15、燈初始化 uart_init (UART0,periph_clk_khz,9600); /串口初始化 /ADC adc_init(0); adc_init(1); uart_sendstring(UART0, (uint8 *)Welcome to K60 ADC Examplern); uart_sendstring(UART0,(uint8 *)Preparing for ADC operate!rn); uart_sendstring(UART0,(uint8 *)Start ADC0.taccuracy is 10.rn); uart_sendstring(UART0,(uint8 *

16、)Start ADC1.taccuracy is 16.rn); /主循環 while(1) /1 主循環計數到一定的值,使小燈的亮、暗狀態切換 runcount+; if(runcount=10) light_change(Light_Run_PORT,Light_Run1);/指示燈的亮、暗狀態切換 runcount=0; /進行一次模塊0通道16采樣 ADValue = ad_ave(0, ADchannel,10,10); uart_sendstring(UART0,(uint8 *)rn); uart_sendnumber(UART0, ADValue); /進行一次模塊1通道16采

17、樣 uart_sendstring(UART0,(uint8 *)t-); ADValue = ad_ave(1, ADchannel,16,10); uart_sendnumber(UART0, ADValue); #else #endif /Control C文件#include include.hunsigned char ConRowSta=40;unsigned char ConRowEnd=60;unsigned short int Speed=100;/按鍵unsigned char Button_work_flag=0;unsigned char Shake_Count=0;u

18、nsigned char Work_Button=0;unsigned char Work_Mode=1;/保護unsigned char Project_Start=0;unsigned char Start_Count=0;/PID/float Kp=0.555;/float Kd=0.509;/float Kp=0.370;/float Kd=0.120;/float Kp=0.420;/float Kd=0.530;/float Kp=0.300;/float Kd=1.900;float Kd=0.200;unsigned short int Motor_P=50;unsigned

19、char Motor_I=1;unsigned char Motor_D=10;short int Speed_Output=0;/有關剎車unsigned short int Speed_Base=0;unsigned short int DJ=3300;unsigned short int Speed_Max=100;unsigned short int Speed_Min=100;/Max 120 Min 100 穩定 十字還有問題 Max 130 Min 105 稍微有點不穩unsigned char straight_Speed=100;unsigned char StaLine_d

20、elay=25;unsigned short int DuoJi_Goal=5520;unsigned char DuoJi_Value_Count=0;unsigned short int L_DuoJi_Goal=5520;signed short int DuoJi_Add=0;unsigned short int Change_error=800;void Key(void) static signed char order_num=0; static unsigned char temp=0; if(Work_Mode) if(Button_work_flag=0) if(Key_o

21、ne=0) Button_work_flag=1; else if(Key_two=0) Button_work_flag=2; else if(Key_three=0) Button_work_flag=3; else if(Key_four=0) Button_work_flag=4; else if(Shake_Count3) Shake_Count=0; if(Button_work_flag=1) Button_work_flag=0; if(Key_one=0) /while(!Key_one); Work_Button=1; order_num+; if(order_num100

22、) order_num=100; else Work_Button=0; else if(Button_work_flag=2) Button_work_flag=0; if(Key_two=0) /while(!Key_two); Work_Button=2; order_num-; if(order_num8) key_display(5); temp=0; /key_display(5);void Project(void) if(Project_Start) if(Pulse=0) Motor_PWM=0; Work_Mode=1; Project_Start=0; void butt

23、on_debug_data(char order,char anniu_number) /賽車數據按鈕在線設置函數 if(anniu_number=3) /加 switch(order) /case 1: ConRowSta+; break; /case 2: ConRowEnd+; break; /case 3: Speed+=10; break; /case 4: break; case 6: Kp+=0.01; break; case 7: Kd+=0.01; break; case 13: Speed_Base+=50; break; case 9: Change_error+=50;

24、 break; /case 9: Motor_P+=1; break; case 11: Motor_I+=1; break; case 12: Motor_D+=1; break; /case 13: DJ+=100; break; case 3: Speed_Max+=5; break; case 2: Speed_Min+=5; break; case 4: straight_Speed+=5; break; case 1: StaLine_delay+=1; break; case 8: StaLine_zhi+=1; break; default : break; else if(a

25、nniu_number=4) /減 switch(order) /case 1: ConRowSta-; break; /case 2: ConRowEnd-; break; / case 3: Speed-=10; break; / case 4: break; case 6: Kp-=0.01; break; case 7: Kd-=0.01; break; case 13: Speed_Base-=50; break; case 9: Change_error-=50; break; /case 9: Motor_P-=1; break; case 11: Motor_I-=1; bre

26、ak; case 12: Motor_D-=1; break; /case 13: DJ-=100; break; case 3: Speed_Max-=5; break; case 2: Speed_Min-=5; break; case 4: straight_Speed-=5; break; case 1: StaLine_delay-=1; break; case 8: StaLine_zhi-=1; break; default : break; void key_display(unsigned char order) /鍵盤顯示函數 AT_LED_P8x16Str(0,0,ord

27、er); LED_P8x16Str(0,2, ); switch(order) /case 1: LED_P8x16Str(0,2,ConRowSta:);AT_LED_P8x16Str(80,2,ConRowSta);break; /case 2: LED_P8x16Str(0,2,ConRowEnd:);AT_LED_P8x16Str(80,2,ConRowEnd);break; /case 3: LED_P8x16Str(0,2,Speed:);AT_LED_P8x16Str_4w(48,2,Speed);break; case 5: LED_P8x16Str(0,2,Pulse:);

28、AT_LED_P8x16Str(48,2,Pulse);break; /case 5: LED_P8x16Str(8,0,x:);LED_P8x16Str(0,2,);break; case 6: LED_P8x16Str(0,2,Kp:); AT_LED_P8x16Str_4w_Float(24,2,(uint16)(Kp*1000);break; case 7: LED_P8x16Str(0,2,Kd:); AT_LED_P8x16Str_4w_Float(24,2,(uint16)(Kd*1000);break; case 13: LED_P8x16Str(0,2,Speed_Base:

29、); AT_LED_P8x16Str(88,2,Speed_Base);break; case 9: LED_P8x16Str(0,2,Change_error); AT_LED_P8x16Str_4w(96,2,Change_error);break; case 11: LED_P8x16Str(0,2,Motor_I:); AT_LED_P8x16Str(64,2,Motor_I);break; case 12: LED_P8x16Str(0,2,Motor_D:); AT_LED_P8x16Str(64,2,Motor_D);break; /case 13: LED_P8x16Str(0,2,DJ:); AT_LED_P8x16Str_4w(24,2,DJ);break; case 3: LED_P8x16Str(0,2,Speed_Max:); AT_LED_P8x16Str_4w(80,2,Speed_Max);break; case 2: LED_P8x16Str(0,2,Speed_Min:); AT_LED_P8x16Str_4w(80,2,Speed_Min);break; case 4: LED_P8x16Str(0,2,zhi_Speed:); AT_LED_P8x16Str_4w(80,2,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論