简单的小车循迹程序求助~谢谢啦·!

[复制链接]
 楼主| 包子lxy 发表于 2013-8-8 13:45 | 显示全部楼层 |阅读模式

#include "msp430.h"
#include "gdata.h"
#include "car motor.h"


#define Left1 (P3IN&BIT0)         //P3_4接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1
#define Left2 (P3IN&BIT1)        //P3_5接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2       
#define Right1 (P3IN&BIT2)      //P3_6接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3
#define Right2 (P3IN&BIT3)         //P3_7接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4

void Clock_Init()
{
  uchar i;
  BCSCTL1&=~XT2OFF;                 //打开XT振荡器
  BCSCTL2|=SELM1+SELS;              //MCLK为8MHZ,SMCLK为8MHZ
  do{
    IFG1&=~OFIFG;                   //清除震荡标志
    for(i=0;i<100;i++)
       _NOP();                      //延时等待
  }
  while((IFG1&OFIFG)!=0);           //如果标志为1,则继续循环等待
  IFG1&=~OFIFG;
}


void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;

  Clock_Init();
   while(1)
  {
     P3DIR&=~(BIT0+BIT1+BIT2+BIT3);
      run();

      if(Right1 == 1 && Left2 == 0)                //右边检测到黑线
      {                         
        left();                                          
      }
                               
      else if(Left2 == 1&& Right1 == 0)            //左边检测到黑线
      {
                       
        right();                                          
      }
  }
}



咱这是个很简单的循迹程序,遇到问题,程序执行run()语句之后就不下去了。。。

不会跟随传感器变化而变化,传感器输出高电平4.7V,低电平接近0V。。

left();run()这几个运动函数在其他头文件没考过来,应该是没问题对的,因为把run换成left或者right都是对的,但就是对传感器没反应。。。



求助啊。。

 楼主| 包子lxy 发表于 2013-8-8 17:40 | 显示全部楼层
求助。。。。
comeon201208 发表于 2013-8-8 21:03 | 显示全部楼层
查下run()函数里面有没有死循环等待的,有的话利用定时器或其他的中断设置一个超时退出等待的程序的吧
 楼主| 包子lxy 发表于 2013-8-8 21:09 | 显示全部楼层
comeon201208 发表于 2013-8-8 21:03
查下run()函数里面有没有死循环等待的,有的话利用定时器或其他的中断设置一个超时退出等待的程序的吧 ...

void run(void)
{
         Left_moto_go ;
         Right_moto_go ;
}



这是我的run函数,两个语句之前宏定义就是最简单的电平输出。。。也没啥问题感觉。。而且同样的程序结构流程,改动到51上就是可以运行的。。。哎
 楼主| 包子lxy 发表于 2013-8-8 22:00 | 显示全部楼层
1988020566 发表于 2013-8-8 23:25 | 显示全部楼层
你用的什么传感器?
1988020566 发表于 2013-8-8 23:26 | 显示全部楼层
如果是对射二极管 需要上拉电阻的。
1988020566 发表于 2013-8-8 23:27 | 显示全部楼层
对射二极管 的驱动能力很弱。
 楼主| 包子lxy 发表于 2013-8-8 23:34 | 显示全部楼层
1988020566 发表于 2013-8-8 23:25
你用的什么传感器?

光电,加了四路电压比较器了,输出高电平4.7V,达到msp430的高电平要求了。。。
1988020566 发表于 2013-8-8 23:36 | 显示全部楼层
建议你在中断执行判断的。
 楼主| 包子lxy 发表于 2013-8-8 23:38 | 显示全部楼层
1988020566 发表于 2013-8-8 23:36
建议你在中断执行判断的。

中断可行。。但是我想知道我这种方法错哪了--
1988020566 发表于 2013-8-8 23:42 | 显示全部楼层
不知道你怎么看出来就下不去了?
1988020566 发表于 2013-8-8 23:43 | 显示全部楼层
在你自行左右操作的时候 是否有时间延时函数?
1988020566 发表于 2013-8-8 23:43 | 显示全部楼层
你的左右检测 信号是怎么测出来的 ?
 楼主| 包子lxy 发表于 2013-8-8 23:45 | 显示全部楼层
1988020566 发表于 2013-8-8 23:42
不知道你怎么看出来就下不去了?

我有小车。。直接放地上跑着试的,后来把本来接L298驱动控制口的线直接接到led上。。发现led也是不会改变亮法,永远保持run函数输出时候的样子==
1988020566 发表于 2013-8-8 23:46 | 显示全部楼层
你有延时函数么?时间长短怎么样?太短了 根本看不出改变的。
 楼主| 包子lxy 发表于 2013-8-8 23:47 | 显示全部楼层
1988020566 发表于 2013-8-8 23:43
你的左右检测 信号是怎么测出来的 ?

光电传感器接电压比较器,由电压比较器输出到430IO口
1988020566 发表于 2013-8-8 23:47 | 显示全部楼层
而且你的run函数是跑多长时间,你的左右操控又是多长时间 你得把握好了
1988020566 发表于 2013-8-8 23:48 | 显示全部楼层
包子lxy 发表于 2013-8-8 23:47
光电传感器接电压比较器,由电压比较器输出到430IO口

建议你使用中断,虽然效率降低但是操作更精确了。
 楼主| 包子lxy 发表于 2013-8-8 23:50 | 显示全部楼层
1988020566 发表于 2013-8-8 23:47
而且你的run函数是跑多长时间,你的左右操控又是多长时间 你得把握好了

如果没有信号,那么就在while(1)里面无限循环run,如果一旦有了检测信号,就对应执行相应函数,直到检测信号消失。。。这个逻辑过程应该是没什么问题的,这里不需要延时的。。我在51就是这么写的,小车循迹完全没问题。。今天改换到430就不对了。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

95

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部