1、飞思卡尔智能车Main.c#include /* common defines and macros */#include /* derivative information */#pragma LINK_INFO DERIVATIVE mc9s12db128b#include define.h#include init.h/ variable used in video processvolatile unsigned char image_dataROW_MAXLINE_MAX ; / data array of pictureunsigned char black_xROW_MAX ;
2、/ 0ne-dimensional arrayunsigned char row ; / x-position of the arrayunsigned char line ; / y-position of the arrayunsigned int row_count ; / row counterunsigned char line_sample ; / used to counter in ADunsigned char row_image ;unsigned char line_temp ; / temperary variable used in data transferunsi
3、gned char sample_dataLINE_MAX ; / used to save one-dimension array got ininterruption/ variables below are used in speed measureUnsigned char pulse5 ; / used to save data in PA processUnsigned char counter; / temporary counter in Speed detectUnsigned char cur_speed; / current speedshort stand;short
4、data;unsigned char curve ; / valve used to decide straight or turnshort Bounds(short data);short FuzzyLogic(short stand);/*-*receive_sci*-*/unsigned char receive_sci(void) / receive data through sci unsigned char sci_data;while(SCI0SR1_RDRF!=1);sci_data=SCI0DRL;return sci_data;/*-*transmit_sci*-*/vo
5、id transmit_sci(unsigned char transmit_data) / send data through sciwhile(SCI0SR1_TC!=1);while(SCI0SR1_TDRE!=1);SCI0DRL=transmit_data;/*/*-*abs_sub*-*/unsigned char abs_sub(unsigned char num1, unsigned char num2) unsigned char difference;if(num1=num2)difference=num1-num2;elsedifference=num2-num1;ret
6、urn difference;void pwm_set(unsigned int dutycycle)PWMDTY1=dutycycle&0x00FF;PWMDTY0=dutycycle8;void get_black_wire(void) / used to extract black wire unsigned char i;for(row=0;rowROW_MAX;row+)for(line=LINE_MIN;lineimage_datarowline+3+VALVE)for(i=3;i10;i+)if(image_datarowline+i+VALVEimage_datarowline
7、+i+3)black_xrow=line+i/2+2;i=10;line=LINE_MAX; else/black_xrow=(black_xrow/45)*78;/*-*speed_control*-*/void speed_control(void)unsigned int sum,average;sum=0;for(row=0;rowFIRST_FIVE;row+)sum=sum+black_xrow;average=sum/FIRST_FIVE;curve=0;for(row=0;rowCURVE_MAX)curve_flag=0;speed=low_speed;elsecurve_f
8、lag=1;speed=hign_speed;/*-*steer_control*-*/void steer_control(void) unsigned int dutycycle;unsigned char video_center;unsigned int coefficient;int E,U; /currentstatic int e=0;video_center=(LINE_MIN+LINE_MAX)/2;stand=abs_sub(black_x1+ black_x9,2*black_x5);E=video_center-black_x8;coefficient=30+1*Fuz
9、zyLogic(stand);U=coefficient*E;dutycycle=Bounds(center+U);pwm_set(dutycycle);/ make sure it is within boundsshort Bounds(short data)if(dataright_limit)data = right_limit;if(dataleft_limit)data = left_limit;return data;Void speed_get(void)Unsigned char temp;Counter+;Temp=PACN1;cur_speed=temp-pulsecounter-1;pulsecounter-1=temp;if(counter=5)counter=0;Void set_speed(unsigned char desired_speed)If(desired_speedoddwhile(field_signal=0);row_count=0;row_image=0;EnableInterrupts;while(row_countevenwhile(field_signal=1);row_count=0;row_image=0;EnableInterrupts;while(row_countR
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1