智能车制作

标题: 摄像头程序 [打印本页]

作者: 阿洋    时间: 2012-3-29 18:30
标题: 摄像头程序
Main.c
#include <hidef.h> /* common defines and macros */
#include <mc9s12db128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12db128b"
#include "define.h"
#include "init.h"
// variable used in video process
volatile unsigned char image_data[ROW_MAX][LINE_MAX] ; // data array of picture
unsigned char black_x[ROW_MAX] ; // 0ne-dimensional array
unsigned char row ; // x-position of the array
unsigned char line ; // y-position of the array
unsigned int row_count ; // row counter
unsigned char line_sample ; // used to counter in AD
unsigned char row_image ;
unsigned char line_temp ; // temperary variable used in data transfer
unsigned char sample_data[LINE_MAX] ; // used to save one-dimension array got in
interruption
// variables below are used in speed measure
Unsigned char pulse[5] ; // used to save data in PA process
Unsigned char counter; // temporary counter in Speed detect
Unsigned char cur_speed; // current speed
short stand;
short data;
unsigned char curve ; // valve used to decide straight or turn
short 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
\*----------------------------------------------------------------------------*/
void transmit_sci(unsigned char transmit_data) // send data through sci
{
while(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;
}else{
difference=num2-num1;
}
return difference;
}
void pwm_set(unsigned int dutycycle)
{
PWMDTY1=dutycycle&0x00FF;
PWMDTY0=dutycycle>>8;
}
void get_black_wire(void) // used to extract black wire
{ unsigned char i;
for(row=0;row<ROW_MAX;row++){
for(line=LINE_MIN;line<LINE_MAX-3;line++){
if(image_data[row][line]>image_data[row][line+3]+VALVE){
for(i=3;i<10;i++){
if(image_data[row][line+i]+VALVE<image_data[row][line+i+3]){
black_x[row]=line+i/2+2;
i=10;
}
}
line=LINE_MAX;
} else{
//black_x[row]=(black_x[row]/45)*78;
}
}
}
}
/*----------------------------------------------------------------------------*\
speed_control
\*----------------------------------------------------------------------------*/
void speed_control(void)
{
unsigned int sum,average;
sum=0;
for(row=0;row<FIRST_FIVE;row++){
sum=sum+black_x[row];
}
average=sum/FIRST_FIVE;
curve=0;
for(row=0;row<FIRST_FIVE;row++)
{
curve=curve+abs_sub(black_x[row],average);
if(curve>CURVE_MAX){
curve_flag=0;
speed=low_speed;}
else{
curve_flag=1;
speed=hign_speed;
}
}
}
/*----------------------------------------------------------------------------*\
steer_control
\*----------------------------------------------------------------------------*/
void steer_control(void)
{ unsigned int dutycycle;
unsigned char video_center;
unsigned int coefficient;
int E,U; //current
static int e=0;
video_center=(LINE_MIN+LINE_MAX)/2;
stand=abs_sub(black_x[1]+ black_x[9],2*black_x[5]);
E=video_center-black_x[8];
coefficient=30+1*FuzzyLogic(stand);
U=coefficient*E;
dutycycle=Bounds(center+U);
pwm_set(dutycycle);
}
// make sure it is within bounds
short Bounds(short data){
if(data>right_limit){
data = right_limit;
}
if(data<left_limit){
data = left_limit;
}
return data;
}
Void speed_get(void)
{
Unsigned char temp;
Counter++;
Temp=PACN1;
cur_speed=temp-pulse[counter-1];
pulse[counter-1]=temp;
if(counter==5)
{
counter=0;
}
}
Void set_speed(unsigned char desired_speed)
{
If(desired_speed<cur_speed)
{
PWMDTY2=low_speed;
}
Else
{
PWMDTY2=high_speed;
}
}
/*****************************************************************************
*\
Main
\*****************************************************************************
*/
void main(void) {
// main functiion
init_PORT() ;
// port initialization
init_PLL() ;
// setting of the PLL
init_ECT();
init_PWM() ;
// PWM INITIALIZATION
init_SPEED() ;
init_SCI() ;
for(;;) {
if(field_signal==0){ // even->odd
while(field_signal==0);
row_count=0;
row_image=0;
EnableInterrupts;
while(row_count<ROW_END){
get_black_wire();
speed_control();
steer_control();
}
DisableInterrupts;

作者: yukunlinykl    时间: 2012-3-29 18:48
这样粘贴出来的代码,没有人会看的!
作者: dongpinbo    时间: 2012-3-31 17:52
跟上楼一样


作者: wanyfe    时间: 2012-3-31 18:44
怎么没有注释呢?

作者: hpz    时间: 2012-11-4 21:18





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2