智能车制作

标题: 起跑线已识别,都已经停下来了,突然又启动了 [打印本页]

作者: 1102252970    时间: 2013-7-10 16:07
标题: 起跑线已识别,都已经停下来了,突然又启动了
void main()
{
for(;;)  
  {
   if( VSYN_C)
    {
     getheixian();
      lvbo1();
      Avg();  
     duoji();
      if(LT*RT==0) sudu();
      VSYN_C=0;
  }
    if(LT*RT)//起跑线
     {
       PWMDTY23=0;
       if(CurrentVelocity<30)
      {
        PWMDTY23=100;
        break;
       }
   }      
  }
  for(;;)
{
  if( VSYN_C)
    {
     kfc=1;   
      PWMDTY23=100;
      getheixian();
      lvbo1();
      Avg();
      duoji();
      VSYN_C=0;
  }

}
PWMDTY01=100=PWMDTY23;此时电机不转


if(LT*RT)判断到起跑线后PWMDTY23=0;即反转,与此同时,LT*RT一直为1,不执行速度控制函数,等到编码器返回的读数小于30的时候,PWMDTY23=100;跳出第一个for循环,进入第二个for循环,事实的确如此,因为kfc已经为1了,照理说接下来小车还能进行打角控制,电机应该不转,但是我发现它停下来后,一秒钟还不到,就又自己启动了这是为什么呢,难道复位了?请教一下,,,,,

作者: silence2455    时间: 2013-7-10 16:25
有没有关中断啊?
作者: 1102252970    时间: 2013-7-10 16:28
silence2455 发表于 2013-7-10 16:25
有没有关中断啊?

我中断没关,但是感觉不会影响速度啊
作者: 1102252970    时间: 2013-7-10 16:36
silence2455 发表于 2013-7-10 16:25
有没有关中断啊?

请问你是指哪个中断
作者: sonwendi    时间: 2013-7-10 23:12
本帖最后由 sonwendi 于 2013-7-10 23:19 编辑

为啥要用两个for循环,if判断起跑线后,将起跑线判断的全局变量置1,通过判断这个标志位来进行刹车就行了
或者如下:
  1. byte End_Flag = 0;
  2. void main()
  3. {
  4. for(;;)
  5. {
  6. if( VSYN_C)
  7. {
  8. getheixian();
  9. lvbo1();
  10. Avg();
  11. duoji();
  12. if(LT*RT)//起跑线
  13. {
  14. End_Flag = 1;//起跑线标志置1
  15. }
  16. if(End_Flag) //检测到过起跑线标志
  17. {
  18. PWMDTY23=0;
  19. if(CurrentVelocity<30)
  20. {
  21. PWMDTY23=100;
  22. End_Flag = 1;
  23. }
  24. }
  25. else sudu(); //一直没检测到起跑线
  26. VSYN_C=0;
  27. }

  28. }
复制代码







作者: 1102252970    时间: 2013-7-11 10:48
sonwendi 发表于 2013-7-10 23:12
为啥要用两个for循环,if判断起跑线后,将起跑线判断的全局变量置1,通过判断这个标志位来进行刹车就行了
...

其实我刚开始也是和你这样的,检测到起跑线,标志位赋1,不执行速度函数,,还是有这样的问题,所以才改成了两个for循环…………




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