智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1908|回复: 7
打印 上一主题 下一主题

小车失控

[复制链接]

6

主题

232

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2021
QQ
威望
1003
贡献
540
兑换币
472
注册时间
2012-9-22
在线时间
239 小时
跳转到指定楼层
1#
发表于 2013-1-3 13:24:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <hidef.h>      /* common defines and macros */
#include"MC9S12XS128.h"

/*********************************摄像头采集程序*********************************/
#define ROW        40//40                 //数字摄像头所采集的二维数组行数
#define COLUMN     84               //数字摄像头所采集的二维数组列数
#define ROW_START  10                 //数字摄像头二维数组行开始行值
#define ROW_MAX    225               //数字摄像头所采集的二维数组行最大值
#define THRESHOLD  0x64  //图像阈值,根据所采集图像亮度值大小的实际情况调整(OV7620所采集的亮度值大小为0--255)
uchar  Buffer[ROW][COLUMN]={0};       //所采集的图像二维数组
uchar Image_Center[ROW]={0};        //所采集的图像中心线 存储区
                 
uchar  Buffer1[ROW][COLUMN]={0};  //二值化图像缓存数组
uchar  Buffer2[COLUMN]={0};  //中心线图像边界提取
uchar SampleFlag=0;       //奇偶场标记
uint  m=0;                 //换行变量

uint  Line;               //行中断计数变量
uint  hang; //行参量
char turn;//转向变量
int angle;
unsigned int  Get_Image[]={   
                         17,19,21,23,25,28,31,34,37,40,43,46,49,53,57,
                         61,65,69,73,77,81,85,89,94,99,105,111,117,123,
                         129,135,141,147,153,159,166,173,180,187
                 
                         };
                    
/*************************************************************/
/*                      行场中断初始化函数                   */
/*************************************************************/
void TIM_Init(void)
{
        TIOS=0x00;              //外部输入捕捉0,1通道
        TCTL4=0x09;             //通道0 上升沿触发,通道1下降沿触发 行中断0上升沿触发,场中断1下降沿触发
        TSCR1=0x80;             //使能
        TIE=0x03;               //通道 0,1 中断使能
        TFLG1=0xFF;             //清中断标志位
}
/*************************************************************/
/*                       串口0初始化函数                     */
/*************************************************************/
void SCI_Init()
{
          SCI0BD=208;              //19200bps     Baud Rate=BusClock/(16*SCIBD)
          SCI0CR1=0;              //正常8 位模式,无奇偶校验
          SCI0CR2=0X2C;           //发送允许  接受中断允许
}
/*************************************************************/
/*                        串口0发送函数                      */
/*************************************************************/
void SCI_Write(unsigned char SendChar)
{
                                         
      while (!(SCI0SR1&0x80));
      SCI0DRH=0;
      SCI0DRL=SendChar;
}
/*************************************************************/
/*                 向电脑串口发送所采集的图像                */
/*************************************************************/
  void Process()
{
   unsigned char i,j;
   for(i=0;i<ROW;i++)
    {
      for(j=0;j<COLUMN;j++)
      {            
       if(Buffer[i][j]>=THRESHOLD)
            
             {
             SCI_Write('1') ;
            
             Buffer1[i][j]=1;  
              
             }
            else   
                {
                SCI_Write('0') ;
  
                Buffer1[i][j]=0;  
              
                }

      }
   
      SCI_Write(0x0D);
      SCI_Write(0X0A);  
   }
}
//////////////////////////数组赋值//////////////////////////////////
void shuzu(void)
{
    char j;
    for(j=0;j<COLUMN;j++)
         Buffer2[j]=41;//初始化Buffer2  的值  共有40行
}
////////////////////////边界提取///////////////////////////////////
void bianjie(void)
{
   char i,j,flag_zuo=0,flag_you=0;
   for(i=10;i<40;i++)//拥谑?轿逍信卸?
   {
     flag_zuo=0;
     flag_you=0;
      for(j=0;j<42;j++) //从中间往两边采集
       {
       /////////////////////左///////////////////////   
         if((Buffer1[i][41-j]==0)&&(flag_zuo==0)&&(Buffer1[i][40-j]==0))
         {         
            Buffer2[i]=(41-j); //图像边界提取dengyu 列号
            flag_zuo=1;   
         }
      ///////////////////////右/////////////////////              
          if((Buffer1[i][42+j]==0)&&(flag_you==0)&&(Buffer1[i][43+j]==0))
          {         
             Buffer2[42+i]=(42+j);//等于列号   
             flag_you=1;
          }
        
       }
     if(flag_zuo==0) Buffer2[i]=0;  //没有找到黑点有效边界
     if(flag_you==0) Buffer2[42+i]=83;
   }
   //========= 转向提取   10     16=========//弯道提取函数
   turn=0;
   /******************   提取中心引导线    ***************************/
   for(i=5;i<16;i++)
   {
    Image_Center[i]=Buffer2[i]+ Buffer2[42+i];
    Image_Center[i]>>=1;
   }
     //= Image_Center[15]-Image_Center[10];
    turn = Image_Center[10]-41;
}

void server_driver()  //中间1500    往左转1500-(100/9*θ)   往右转1500+(100/9*θ)
{
//========= 直道 ===========//
    if((Image_Center[10]>38)&&(Image_Center[10]<45)) //29//49
    {angle=1500WMDTY23=angle; PWMDTY45     = 250; }
   //XXXXXXXXX 二 档 XXXXXXXXXXXX//
     //===== 普通弯道 打弯向右 ======//
      if(turn>0)
         {
            
             angle=1500+turn*10;
             PWMDTY23=angle;
           
         }
    //====== 普通弯道 打弯向左 ======//
   if(turn<0)
         {
            
             angle=1500-turn*10;
             PWMDTY23=angle;
           
         }  
    //========== 靠近外侧 =========//丢线时
    if(Buffer2[12]>30&&Buffer2[13]>30)//左边界丢线
    {
      angle=1290; PWMDTY23=angle; PWMDTY45     = 300;
      
    }
    if(Buffer2[54]<60&&Buffer2[55]==60)//右边界边界丢线
     {
      angle=1710; PWMDTY23=angle;  PWMDTY45     = 300;
      
     }                    
}

45

主题

761

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5023
威望
2903
贡献
558
兑换币
1271
注册时间
2012-10-16
在线时间
781 小时
2#
发表于 2013-1-3 13:50:48 | 只看该作者
回复 支持 反对

使用道具 举报

0

主题

83

帖子

0

精华

高级会员

Rank: 4

积分
753
威望
237
贡献
146
兑换币
150
注册时间
2012-12-30
在线时间
185 小时
3#
发表于 2013-1-3 15:45:01 | 只看该作者
;P;P
回复 支持 反对

使用道具 举报

4

主题

323

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2678

活跃会员奖章优秀会员奖章

威望
1271
贡献
857
兑换币
410
注册时间
2012-2-27
在线时间
275 小时
4#
发表于 2013-1-3 15:47:11 | 只看该作者
回复 支持 反对

使用道具 举报

1

主题

746

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3319
QQ
威望
1414
贡献
501
兑换币
277
注册时间
2012-9-25
在线时间
702 小时
5#
发表于 2013-1-3 18:28:30 | 只看该作者
回复 支持 反对

使用道具 举报

21

主题

892

帖子

0

精华

常驻嘉宾

爱板者

Rank: 8Rank: 8

积分
3857

活跃会员奖章优秀会员奖章在线王奖章论坛元老奖章

威望
1833
贡献
1048
兑换币
736
注册时间
2012-12-4
在线时间
488 小时
6#
发表于 2013-1-4 15:50:18 | 只看该作者
:L:L
回复 支持 反对

使用道具 举报

17

主题

375

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3363

活跃会员奖章优秀会员奖章在线王奖章

威望
1269
贡献
520
兑换币
371
注册时间
2012-5-22
在线时间
787 小时
7#
发表于 2013-1-4 17:26:09 | 只看该作者
回复 支持 反对

使用道具 举报

6

主题

232

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2021
QQ
威望
1003
贡献
540
兑换币
472
注册时间
2012-9-22
在线时间
239 小时
8#
 楼主| 发表于 2013-1-4 20:53:09 | 只看该作者
各位大侠,说说有什么问题呗!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-29 16:47 , Processed in 0.093960 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表