智能车制作

标题: 新手写的二值化算法 可是无法控制舵机根据采集来的数据转动啊 求教 [打印本页]

作者: Uuu、    时间: 2014-12-25 17:09
标题: 新手写的二值化算法 可是无法控制舵机根据采集来的数据转动啊 求教
void CCD_Init(void)
{
  unsigned char j;
  unsigned char min=Pixel[0],max=Pixel[0];
  for(j=1;j<127;j++)
  {
    if(Pixel[j]<min)  min=Pixel[j];  
  }
  for(j=1;j<127;j++)
  {
    if(Pixel[j]>max)  max=Pixel[j];  
  }
  Threshold=(max+min)/2; //找到最高点和最低点取平均值作为阈值
}


/*********************************************/
void binaryzation(void)
{
  unsigned char j;
  for(j=0;j<128;j++)
  {
    if(Pixel[j]<Threshold)  //低于阈值的全部当为  黑色
    {
      Pixel_History0[j]=1;  
    }
    else Pixel_History0[j]=0;  //高于阈值的全部当为 白色
  }
}
/************************************************/

void scan(void)
{
  unsigned char j;
  unsigned char n,m;
  
  j=10;
  while(!Pixel_History0[j])
  {
    j++;
  }
  n=j;
  
  j=118;
  while(!Pixel_History0[j])
  {
    j--;
  }
  m=j;
  Midpoint=(n+m)/2;
  
/*  if((Midpoint-64>5)&&(Midpoint-64<=15)) ex_angle=75;
    else if((Midpoint-64>15)&&(Midpoint-64<=25)) ex_angle=78;
      else if((Midpoint-64>25)&&(Midpoint-64<=35)) ex_angle=81;
        else if((Midpoint-64>35)&&(Midpoint-64<=45)) ex_angle=84;
          else if((Midpoint-64>45)&&(Midpoint-64<=55)) ex_angle=87;
            else if(Midpoint-64>55) ex_angle=90;   
              else if((Midpoint-64<-5)&&(Midpoint-64>=-15)) ex_angle=69;
                else if((Midpoint-64<-15)&&(Midpoint-64>=-25)) ex_angle=66;
                  else if((Midpoint-64<-25)&&(Midpoint-64>=-35)) ex_angle=63;
                    else if((Midpoint-64<-35)&&(Midpoint-64>=-45)) ex_angle=60;
                      else if((Midpoint-64<-45)&&(Midpoint-64>=-55)) ex_angle=57;
                        else if(Midpoint-64<-55) ex_angle=54;
                          else ex_angle=72;      */
                          //不同中心数组的序数与占空比的线性关系
                           
  angle=Midpoint/3+51;

}

/***********************************************/
void run(unsigned char speed,unsigned char angle)
{
  PWMDTY3=speed;
  PWMDTY1=angle;   
}

作者: 绿眼睛兔子    时间: 2014-12-25 17:43
还是别贴代码了 很少人看的 看别人的代码 很头疼的  虽然不是很长
作者: zhou1994    时间: 2014-12-25 17:57
看的出来,的却是新手写的。取值和二值化之后的处理都不够,判断也是很粗糙。不过应该 是 可以乱动。
作者: Uuu、    时间: 2014-12-25 18:13
zhou1994 发表于 2014-12-25 17:57
看的出来,的却是新手写的。取值和二值化之后的处理都不够,判断也是很粗糙。不过应该 是 可以乱动。

您好 请问我的舵机无法根据CCD采集的数据转动角度,只能恢复正位 然后就不能动了是什么原因
下一楼是主函数
我才刚做这个几天 新手不好意思


作者: Uuu、    时间: 2014-12-25 18:14
void main(void) {

    unsigned char i;
    unsigned char send_data_cnt = 0;
    unsigned char *pixel_pt;

    SCI0_Init();

    PIT_Init();

    AD_Init();

    CCD_IO_Init();

    LED_Init();
   
    PWM_Init();
   

    /* Init Pixel Array */
    pixel_pt = Pixel;
    for(i=0; i<128+10; i++) {
        *pixel_pt++ = 0;
    }
   
   
    EnableInterrupts;

    for(;;) {

        /* 20ms Task */
        if(TimerFlag20ms == 1) {
            TimerFlag20ms = 0;

            /* Flash LED */
            LED1 = ~LED1;

            /* Sampling CCD data */
            ImageCapture(Pixel);

            /* Calculate Integration Time */
            CalculateIntegrationTime();

            /* Send data to CCDView every 100ms */
            if(++send_data_cnt >= 5) {
                send_data_cnt = 0;
                SendImageData(Pixel);
            }
            /*******************/
            CCD_Init();            
            
            /*******************/
            binaryzation();         //二值化函数
            
            /*******************/
            scan();                 //检测函数
            
            /******************/
            run(speed,angle);       //执行函数

        }

    } /* End of for(;;); loop */

} /* End of main() */
作者: zhou1994    时间: 2014-12-25 18:15
Uuu、 发表于 2014-12-25 18:13
您好 请问我的舵机无法根据CCD采集的数据转动角度,只能恢复正位 然后就不能动了是什么原因
下一楼是主函 ...

你先试试能不能控制舵机转在考虑加ccd

作者: 静默深眠的夏    时间: 2014-12-25 18:34
:(:(:(:(
作者: Uuu、    时间: 2014-12-25 18:44
zhou1994 发表于 2014-12-25 18:15
你先试试能不能控制舵机转在考虑加ccd

光写舵机程序舵机是可以转动的 加了CCD就只会回复正位  看了很久都没看出程序哪出错了
作者: zhou1994    时间: 2014-12-25 18:55
Uuu、 发表于 2014-12-25 18:44
光写舵机程序舵机是可以转动的 加了CCD就只会回复正位  看了很久都没看出程序哪出错了

巡线的那个while逻辑。

作者: Uuu、    时间: 2014-12-25 19:01
zhou1994 发表于 2014-12-25 18:55
巡线的那个while逻辑。

while的逻辑有问题吗
我的想法是从两边往中间找黑线 直到找到黑线边沿的两个点 取平均得到黑线中点的位置

作者: zhou1994    时间: 2014-12-25 21:45
Uuu、 发表于 2014-12-25 19:01
while的逻辑有问题吗
我的想法是从两边往中间找黑线 直到找到黑线边沿的两个点 取平均得到黑线中点的位置 ...

慢慢研究

作者: Uuu、    时间: 2014-12-25 23:20
zhou1994 发表于 2014-12-25 21:45
慢慢研究

好的好的  谢谢前辈





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