智能车制作

标题: 大神 可以帮我看下代码吗 [打印本页]

作者: liuxiaoxiong    时间: 2014-5-7 19:25
标题: 大神 可以帮我看下代码吗
这是一个电磁组的采集数据处理
请问一下  里面的x[0]=-10-(10-10*D/(M0-M))/2  是怎么出来的  X[0]是离导线的距离


函数名称:采集数据处理   
*********************************************************/

void data_process(void)
{  u8 max,cn,cn1;
   u8 i;
   int d;
   u8 D;
   u16 adc_sum;
   u8 t=5;
   //for(i=0;i<7;i++)
     //printf("%d\n",adc[i]);
   //for(i=0;i<5;i++)
    //adc[i]=(int)(adc[i]*(1+positiony*0.05));
   for(i=0;i<9;i++)
   {  x[i+1]=x[i];
   }
   for(i=0;i<9;i++)
   {
    y[i+1]=y[i];
   }
   y[0]=abs(adc[0]-adc[6]);
   //printf("y[0]=%d\n",y[0]);
   max=0;
   for(cn=1;cn<6;cn++)
       if(adc[cn]>max)
       { max=adc[cn];
          cn1=cn;
       }
   //printf("%d\n",cn1);
   if(cn1==1)
   { D=adc[1]-adc[2];
     if(D<t)
       x[0]=-15;
     else if(adc[2]>M)
     x[0]=-20+(10-10*D/(M0-M))/2;
     else
       x[0]=-20;
     //printf("%d\n",x[0]);
   }
   if(cn1==2)
   { d=adc[1]-adc[3];
     if(d>t)
     { D=adc[2]-adc[1];
     x[0]=-10-(10-10*D/(M0-M))/2;}
     else if(d<-t)
     {  D=adc[2]-adc[3];
     x[0]=-10+(10-10*D/(M0-M))/2;}
     else
     x[0]=-10;
    }
   if(cn1==3)
   {  
     d=adc[2]-adc[4];
     if(d>t)
     { D=adc[3]-adc[2];
     x[0]=0-(10-10*D/(M0-M))/2;}
     else if(d<-t)
     { D=adc[3]-adc[4];
     x[0]=0+(10-10*D/(M0-M))/2;}
     else
     x[0]=0;
   }
    if(cn1==4)
   {  
     d=adc[3]-adc[5];
     if(d>t)
     { D=adc[4]-adc[3];
       x[0]=10-(10-10*D/(M0-M))/2;}
     else if(d<-t)
     {D=adc[4]-adc[5];
     x[0]=10+(10-10*D/(M0-M))/2;}
     else
     x[0]=10;
   }
    if(cn1==5)
   { D=adc[5]-adc[4];
     if(D<t)
       x[0]=15;
     else if(adc[4]>M)
      x[0]=20-(10-10*D/(M0-M))/2;
     else
     x[0]=20;

   }
   adc_sum=adc[1]+adc[2]+adc[3]+adc[4]+adc[5];
   if(adc_sum<M)
      x[0]=x[1];
   else if(adc_sum<(M0+M))
   {  if(x[1]<-5)
       x[0]=-20;
      else if(x[1]>5)
        x[0]=20;
   }
  /* cn0=cn1-1;
   cn2=cn1+1;
   if(cn1==3)
     x=-100;
    case 3: d=adc[cn0]-adc[cn2];
           if((d<t)&&(d>-t))
           x=-50;
           else if(d>t)
           {D=adc[cn1]-adc[cn0];
           x=-50-(50-D*50/M)/2;
           }
           else if(d<-t)
           {
             D=adc[cn1]-adc[cn2];
             x=-50+(50-D*50/M)/2;
           }
           break;
    case 4:d=adc[cn0]-adc[cn2];
          if((d<t)&&(d>-t))
           x=0;
           else if(d>t)
           {D=adc[cn1]-adc[cn0];
           x=0-(50-D*50/M)/2;}
           else if(d<-t)
           {D=adc[cn1]-adc[cn2];
           x=0+(50-D*50/M)/2;}
           break;
    case 5: d=adc[cn0]-adc[cn2];
           if((d<t)&&(d>-t))
           x=50;
           else if(d>t)
           {D=adc[cn1]-adc[cn0];
           x=50-(50-D*50/M)/2;}
           else if(d<-t)
           { D=adc[cn1]-adc[cn2];
             x=50+(50-D*50/M)/2;}
           break;
    case 6:x=100;break;
    default: break;
   }*/

}


作者: 土豆的故事    时间: 2014-5-8 10:11
我也看不懂。
作者: xiaoyuyzx    时间: 2014-5-8 13:07
你这程序是对水平五个传感器的数据进行处理的吧,根据可以看看北科的方案,找到最大值然后判断相邻的数据,根据差值给的舵机控制,好像是这样的吧:)
作者: liuxiaoxiong    时间: 2014-5-8 13:23
xiaoyuyzx 发表于 2014-5-8 13:07
你这程序是对水平五个传感器的数据进行处理的吧,根据可以看看北科的方案,找到最大值然后判断相邻的数据, ...

恩恩  ,但是我不懂那个“差值给的舵机控制” ,这个怎么搞

作者: xiaoyuyzx    时间: 2014-5-8 13:27
liuxiaoxiong 发表于 2014-5-8 13:23
恩恩  ,但是我不懂那个“差值给的舵机控制” ,这个怎么搞

你这只是算出来了车的位置,然后你根据这个位置给出对舵机的PD控制,然后就可以了

作者: liuxiaoxiong    时间: 2014-5-8 13:37
xiaoyuyzx 发表于 2014-5-8 13:27
你这只是算出来了车的位置,然后你根据这个位置给出对舵机的PD控制,然后就可以了

恩恩,谢谢 ,但是还有一个地方不懂,不是有俩个垂直的电感吗,不是可以五各电感可以测出差值,给舵机,那为什么还要用俩垂直的电感了, y[0]=abs(adc[0]-adc[6]);

作者: xiaoyuyzx    时间: 2014-5-8 13:44
liuxiaoxiong 发表于 2014-5-8 13:37
恩恩,谢谢 ,但是还有一个地方不懂,不是有俩个垂直的电感吗,不是可以五各电感可以测出差值,给舵机,那 ...

要不你把剩下的给我看看??我分析下??一起进步??

作者: liuxiaoxiong    时间: 2014-5-8 13:46
xiaoyuyzx 发表于 2014-5-8 13:44
要不你把剩下的给我看看??我分析下??一起进步??

加我QQ:1054042386

作者: 猎妖    时间: 2014-5-8 18:48
能发一份给我吗?我也挺感兴趣的  1595926345@qq.com  谢谢拉
作者: 猎妖    时间: 2014-5-8 18:53
能发一份给我吗?我也挺感兴趣的  1595926345@qq.com  谢谢拉




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