XXL 发表于 2015-9-10 10:43:58

小车超声波避障 红外遥控失效

当我单独将超声波函数放到loop里面的时候,小车是可以实现避障功能的,
void loop() {
// put your main code here, to run repeatedly:

if(irrecv.decode(&results))
{
    Serial.println(results.value,HEX);
    irrecv.resume();
   }

Bi_Zhang();

}

但是加了个红外遥控,想先让遥控器按下B键,

void loop() {
// put your main code here, to run repeatedly:

if(irrecv.decode(&results))
{
    Serial.println(results.value,HEX);
    irrecv.resume();
   }


// Bi_Zhang();


switch(results.value)
{
      case 0XFFA25D: key ();break;         //按下A键,进入手动模式
      case 0XFF629D: Bi_Zhang();break;      //按下B键,进入避障模式
//      case 0XFFE21D: Xun_Ji();break;      //按下C键,进入循迹模式

      case 0XFFE21D: beep();break;
      
}


}
然后在启动避障功能,但是却发现原来的避障功能完全失效,只会前行或者是后退,就是单个模块运行没有问题,一整合起来就不行了,请问这是什么原因?

1415926 发表于 2015-9-10 11:44:20

本帖最后由 1415926 于 2015-9-10 11:54 编辑

把当前模式定义一个全局变量

int mode = 避障;

loop(){
if(irrecv.decode(&results)){
    switch(results.value){
       case0XFFA25D:
         mode=手工;
         break;
      ...
   }
   }

   switch(mode){
   case 避障:
         bizhang();
         break;
      ....
   }
}

我估计你的个代码要一直按着B键就会一直避障了。松开了键之后,下次LOOP执行switch(result.value)时,一个case也执行不到,所以电机保持了上次的状态(前进或后退)运转。

XXL 发表于 2015-9-10 12:59:46

1415926 发表于 2015-9-10 11:44 static/image/common/back.gif
把当前模式定义一个全局变量

int mode = 避障;


谢谢你的回答,不过我还有个疑问,这个模式赋值的时候,这个赋值需要重新定义吧,   mode=手工就好比是这里的“手工”   这个定义的类型也是int 吧,假如说我需要添加多个动能模块的时候,该怎么处理,不好意思新手上路麻烦你了

1415926 发表于 2015-9-10 15:20:05

本帖最后由 1415926 于 2015-9-10 15:21 编辑

XXL 发表于 2015-9-10 12:59 static/image/common/back.gif
谢谢你的回答,不过我还有个疑问,这个模式赋值的时候,这个赋值需要重新定义吧,   mode=手工就好比 ...

对的,我那个“手工”、“避障”就是表达一个意思,你肯定要用int型的,最好这样,不直接写1、2、3是因为读起来更容易些,容易理解,也不容易写错。#define BIZHANG 1
#define SHOUGONG 2
#define XUNXIAN 3
#define XINGONGNENGA 4
#define XINGONGNENGB 5

int mode = BIZHANG;

loop(){
switch(){
    case xxx:
       mode = BIZHANG;
       break;
    case xx2:
       mode = XINGONGNENGA:
       break;
    ...
}
}

XXL 发表于 2015-9-10 15:39:00

1415926 发表于 2015-9-10 15:20 static/image/common/back.gif
对的,我那个“手工”、“避障”就是表达一个意思,你肯定要用int型的,最好这样,不直接写1、2、3是因 ...

谢谢,我调试调试去

XXL 发表于 2015-9-11 08:59:12

1415926 发表于 2015-9-10 15:20 static/image/common/back.gif
对的,我那个“手工”、“避障”就是表达一个意思,你肯定要用int型的,最好这样,不直接写1、2、3是因 ...

:)你好,综合你两次给出的思路,小车的行走效果比之前好多了,解决了部分问题,但是还有一个小Bug,遥控器只能按一下有用,也就是说只能切换另外的一种状态,想要再次切换的话就是切换不了了

1415926 发表于 2015-9-11 09:27:33

XXL 发表于 2015-9-11 08:59 static/image/common/back.gif
你好,综合你两次给出的思路,小车的行走效果比之前好多了,解决了部分问题,但是还有一个小Bug,遥控 ...

你的意思是,遥控器第一次切换有效,第二次开始无论按哪个键都无效?

先把小车架起来连电脑上,
把接收得一段程序加Serial.print,看看串口上是否能打印出来数据,
在后面的switch mode 一段也打印数据看看是否正确...

如果还不行,你把这部分代码贴出来

XXL 发表于 2015-9-11 14:10:12

1415926 发表于 2015-9-11 09:27 static/image/common/back.gif
你的意思是,遥控器第一次切换有效,第二次开始无论按哪个键都无效?

先把小车架起来连电脑上,


嗯解决了,是注释的时候注释了不该注释的,麻烦你了,谢谢
页: [1]
查看完整版本: 小车超声波避障 红外遥控失效