智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1781|回复: 5
打印 上一主题 下一主题

起跑线已识别,都已经停下来了,突然又启动了

[复制链接]

37

主题

180

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3049
威望
1439
贡献
794
兑换币
905
注册时间
2013-1-23
在线时间
408 小时
跳转到指定楼层
1#
发表于 2013-7-10 16:07:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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了,照理说接下来小车还能进行打角控制,电机应该不转,但是我发现它停下来后,一秒钟还不到,就又自己启动了这是为什么呢,难道复位了?请教一下,,,,,

2

主题

194

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1751
威望
884
贡献
499
兑换币
441
注册时间
2012-10-14
在线时间
184 小时
2#
发表于 2013-7-10 16:25:47 | 只看该作者
有没有关中断啊?
回复 支持 反对

使用道具 举报

37

主题

180

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3049
威望
1439
贡献
794
兑换币
905
注册时间
2013-1-23
在线时间
408 小时
3#
 楼主| 发表于 2013-7-10 16:28:28 | 只看该作者
silence2455 发表于 2013-7-10 16:25
有没有关中断啊?

我中断没关,但是感觉不会影响速度啊
回复 支持 反对

使用道具 举报

37

主题

180

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3049
威望
1439
贡献
794
兑换币
905
注册时间
2013-1-23
在线时间
408 小时
4#
 楼主| 发表于 2013-7-10 16:36:01 | 只看该作者
silence2455 发表于 2013-7-10 16:25
有没有关中断啊?

请问你是指哪个中断
回复 支持 反对

使用道具 举报

44

主题

1485

帖子

0

精华

版主

早川队队长

Rank: 9Rank: 9Rank: 9

积分
20210

资源大师奖章论坛骨干奖章推广达人奖章论坛元老奖章活跃会员奖章优秀会员奖章在线王奖章优秀版主奖章

QQ
威望
5864
贡献
12698
兑换币
630
注册时间
2009-8-18
在线时间
824 小时
5#
发表于 2013-7-10 23:12:09 | 只看该作者
本帖最后由 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. }
复制代码






回复 支持 反对

使用道具 举报

37

主题

180

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3049
威望
1439
贡献
794
兑换币
905
注册时间
2013-1-23
在线时间
408 小时
6#
 楼主| 发表于 2013-7-11 10:48:15 | 只看该作者
sonwendi 发表于 2013-7-10 23:12
为啥要用两个for循环,if判断起跑线后,将起跑线判断的全局变量置1,通过判断这个标志位来进行刹车就行了
...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 06:26 , Processed in 0.047480 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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