打印

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

[复制链接]
5213|42
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
包子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上就是可以运行的。。。哎

使用特权

评论回复
5
包子lxy|  楼主 | 2013-8-8 22:00 | 只看该作者
@dirtwillfly 求助~!

使用特权

评论回复
6
1988020566| | 2013-8-8 23:25 | 只看该作者
你用的什么传感器?

使用特权

评论回复
7
1988020566| | 2013-8-8 23:26 | 只看该作者
如果是对射二极管 需要上拉电阻的。

使用特权

评论回复
8
1988020566| | 2013-8-8 23:27 | 只看该作者
对射二极管 的驱动能力很弱。

使用特权

评论回复
9
包子lxy|  楼主 | 2013-8-8 23:34 | 只看该作者
1988020566 发表于 2013-8-8 23:25
你用的什么传感器?

光电,加了四路电压比较器了,输出高电平4.7V,达到msp430的高电平要求了。。。

使用特权

评论回复
10
1988020566| | 2013-8-8 23:36 | 只看该作者
建议你在中断执行判断的。

使用特权

评论回复
11
包子lxy|  楼主 | 2013-8-8 23:38 | 只看该作者
1988020566 发表于 2013-8-8 23:36
建议你在中断执行判断的。

中断可行。。但是我想知道我这种方法错哪了--

使用特权

评论回复
12
1988020566| | 2013-8-8 23:42 | 只看该作者
不知道你怎么看出来就下不去了?

使用特权

评论回复
13
1988020566| | 2013-8-8 23:43 | 只看该作者
在你自行左右操作的时候 是否有时间延时函数?

使用特权

评论回复
14
1988020566| | 2013-8-8 23:43 | 只看该作者
你的左右检测 信号是怎么测出来的 ?

使用特权

评论回复
15
包子lxy|  楼主 | 2013-8-8 23:45 | 只看该作者
1988020566 发表于 2013-8-8 23:42
不知道你怎么看出来就下不去了?

我有小车。。直接放地上跑着试的,后来把本来接L298驱动控制口的线直接接到led上。。发现led也是不会改变亮法,永远保持run函数输出时候的样子==

使用特权

评论回复
16
1988020566| | 2013-8-8 23:46 | 只看该作者
你有延时函数么?时间长短怎么样?太短了 根本看不出改变的。

使用特权

评论回复
17
包子lxy|  楼主 | 2013-8-8 23:47 | 只看该作者
1988020566 发表于 2013-8-8 23:43
你的左右检测 信号是怎么测出来的 ?

光电传感器接电压比较器,由电压比较器输出到430IO口

使用特权

评论回复
18
1988020566| | 2013-8-8 23:47 | 只看该作者
而且你的run函数是跑多长时间,你的左右操控又是多长时间 你得把握好了

使用特权

评论回复
19
1988020566| | 2013-8-8 23:48 | 只看该作者
包子lxy 发表于 2013-8-8 23:47
光电传感器接电压比较器,由电压比较器输出到430IO口

建议你使用中断,虽然效率降低但是操作更精确了。

使用特权

评论回复
20
包子lxy|  楼主 | 2013-8-8 23:50 | 只看该作者
1988020566 发表于 2013-8-8 23:47
而且你的run函数是跑多长时间,你的左右操控又是多长时间 你得把握好了

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

95

帖子

0

粉丝