小车摄像头寻线程序C语言编写_第1页
小车摄像头寻线程序C语言编写_第2页
小车摄像头寻线程序C语言编写_第3页
小车摄像头寻线程序C语言编写_第4页
小车摄像头寻线程序C语言编写_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#include "include.h"#include "math.h"uint8 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_im

2、age;unsigned int Time;unsigned 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_Time>75) Cross_flag=0; void Start_TwoMiao(void) static unsigned char i=0; if(FaChe=1&&Work_Mode=1) if(i

3、<200) i+; if(i>150) FaChe=0; Work_Mode=0; /Motor_PWM=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

4、enable_irq(68);/定时器0 enable_irq(69);/定时器1 LED_P8x16Str(0,0,"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_g

5、et(PORTA,14)=0 && gpio_get(PORTA,16)=1 ) /最大速度/ / Speed_Max=160;/ Speed_Min=90;/ 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

6、)/ / Speed_Max=150;/ Speed_Min=110;/ straight_Speed=150;/ for(;) /cross_Recognition=0; #if Control_one if(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_Fram

7、eBuffer_Even0); /求边缘 /SCI(); if(XuXian_Flag=1) /XuXian_Find(uc_FrameBuffer_Even0); /SCI(); if(White_Row_End!=IMAGE_ROW-1 && White_Row_End>10) Cross_Connect(); /SCI(); Edge_Filtering(); /边缘滤波 Edge_Repair(); Cross(1); /SCI(); / if(cross_Recognition!=1) / Repair_Edge(); / New_Control(); /Ser

8、vo_PWM=5450; /Servo_PWM=4600; /Servo_PWM=6300; if(Work_Mode=0) /Motor_Control(); Motor_PWM=2000; /Key(); SCI(); /Project(); /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

9、_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_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

10、_Value); AT_LED_P8x16Str_4w_int(48,6,Right_Inflexion_Point); AT_LED_P8x16Str(104,0,XuXian_Flag); AT_LED_P8x16Str(104,6,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

11、(PORTA,16,1); Denoising(uc_FrameBuffer_Even0); /去噪 EdgeDetection(uc_FrameBuffer_Even0,EdgeData0); /提取边缘 Get_Edge(uc_FrameBuffer_Even0); /求边缘 if(XuXian_Flag=1) /XuXian_Find(uc_FrameBuffer_Even0); if(White_Row_End!=IMAGE_ROW-1 && White_Row_End>10) Cross_Connect(); Edge_Filtering(); /边缘滤波 Ed

12、ge_Repair(); Cross(1); /if(cross_Recognition!=1) / Repair_Edge(); / /Cross_Stop(); New_Control(); if(Work_Mode=0) Motor_Control(); /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(POR

13、TA,16,1); Source_image=uc_FrameBuffer_Odd0; Denoising(uc_FrameBuffer_Odd0); /去噪 EdgeDetection(uc_FrameBuffer_Odd0,EdgeData0); /提取边缘 Get_Edge(uc_FrameBuffer_Odd0); /求边缘 if(XuXian_Flag=1) /XuXian_Find(uc_FrameBuffer_Even0); if(White_Row_End!=IMAGE_ROW-1 && White_Row_End>10) Cross_Connect();

14、 Edge_Filtering(); /边缘滤波 Edge_Repair(); Cross(1); /if(cross_Recognition!=1) / Repair_Edge(); / /Cross_Stop(); New_Control(); if(Work_Mode=0) Motor_Control(); /Motor_PWM=1400; /Motor_PWM=DJ; Key(); Start_TwoMiao(); /Project(); /SCI(); ImageOverOdd=FALSE; /gpio_ctrl(PORTA,16,0); #elif Control_three /1

15、 主程序使用的变量定义 uint32 runcount;/运行计数器 uint16 ADValue; /2 关中断 DisableInterrupts; /禁止总中断 /3 模块初始化 light_init(Light_Run_PORT,Light_Run1,Light_OFF); /指示灯初始化 uart_init (UART0,periph_clk_khz,9600); /串口初始化 /ADC adc_init(0); adc_init(1); uart_sendstring(UART0, (uint8 *)"Welcome to K60 ADC Examplern")

16、; uart_sendstring(UART0,(uint8 *)"Preparing for ADC operate!rn"); uart_sendstring(UART0,(uint8 *)"Start ADC0.taccuracy is 10.rn"); uart_sendstring(UART0,(uint8 *)"Start ADC1.taccuracy is 16.rn"); /主循环 while(1) /1 主循环计数到一定的值,使小灯的亮、暗状态切换 runcount+; if(runcount>=10) lig

17、ht_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采样 uart_sendstring(UART0,(uint8 *)"t-"); ADValue = ad_ave(1, ADchannel,16,10); uar

18、t_sendnumber(UART0, ADValue); #else #endif /Control C文件#include "include.h"unsigned char ConRowSta=40;unsigned char ConRowEnd=60;unsigned short int Speed=100;/按键unsigned char Button_work_flag=0;unsigned char Shake_Count=0;unsigned char Work_Button=0;unsigned char Work_Mode=1;/保护unsigned ch

19、ar 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 char Motor_I=1;unsigned char Motor_D=10;short int Speed_Output=0;/有

20、关刹车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_delay=25;unsigned short int DuoJi_Goal=5520;unsigned char DuoJi_Valu

21、e_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_one=0) Button_work_flag=1; else if(Key_two=0) Button_work_flag=2; el

22、se if(Key_three=0) Button_work_flag=3; else if(Key_four=0) Button_work_flag=4; else if(Shake_Count>3) 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_num>100) order_num=100; else Work_Button=0; else if(Button_work_fl

23、ag=2) Button_work_flag=0; if(Key_two=0) /while(!Key_two); Work_Button=2; order_num-; if(order_num<0) order_num=0; else Work_Button=0; else if(Button_work_flag=3) Button_work_flag=0; if(Key_three=0) Work_Button=3; else Work_Button=0; if(order_num%5=0) FaChe=1; LED_P8x16Str(80,0,"Start");

24、 else if(Button_work_flag=4) Button_work_flag=0; if(Key_four=0) Work_Button=4; else Work_Button=0; if(order_num%5=0) FaChe=1; LED_P8x16Str(80,0,"Start"); else Button_work_flag=0; Work_Button=0; if(Work_Button!=0 && Work_Mode!=0) if(Work_Button=3 | Work_Button=4) button_debug_data(o

25、rder_num,Work_Button); key_display(order_num); Work_Button=0; else temp+; if(temp>8) 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 button_debug_data(char order,char anniu_number) /赛车数据按钮在线设置函数 if(anniu_numb

26、er=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; break; /case 9: Motor_P+=1; break; case 11: Motor_I+=1; break; case 12

27、: 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(anniu_number=4) /减 switch(order) /case 1: ConRowSta-; break; /case 2: Co

28、nRowEnd-; 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; break; case 12: Motor_D-=1; break; /case 13: DJ-=100; break; case 3: Speed

29、_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,order); LED_P8x16Str(0,2," "); switch(order) /case 1: LED_P8x16S

30、tr(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:"); AT_LED_P8x1

31、6Str(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;

32、case 13: LED_P8x16Str(0,2,"Speed_Base:"); 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

33、,"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_4

34、w(80,2,Speed_Min);break; case 4: LED_P8x16Str(0,2,"zhi_Speed:"); AT_LED_P8x16Str_4w(80,2,straight_Speed);break; case 1: LED_P8x16Str(0,2,"StaLine_delay"); AT_LED_P8x16Str(104,2,StaLine_delay);break; case 8: LED_P8x16Str(0,2,"StaLin_zhi"); LED_P8x16Str(104,2,"/20"); AT_LED_P8x16Str(80,2,StaLine_zhi);break; /case 8: LED_P8x16Str(8,0,"x:");LED_P8x16Str(0,2,""

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论