极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14487|回复: 7

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

[复制链接]
发表于 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;
      
  }


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

使用道具 举报

发表于 2015-9-10 11:44:20 | 显示全部楼层
本帖最后由 1415926 于 2015-9-10 11:54 编辑

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

[pre lang="arduino" line="50"]int mode = 避障;

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

   switch(mode){
     case 避障:
         bizhang();
         break;
      ....
   }
}[/code]

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

使用道具 举报

 楼主| 发表于 2015-9-10 12:59:46 | 显示全部楼层
1415926 发表于 2015-9-10 11:44
把当前模式定义一个全局变量

int mode = 避障;

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

使用道具 举报

发表于 2015-9-10 15:20:05 | 显示全部楼层
本帖最后由 1415926 于 2015-9-10 15:21 编辑
XXL 发表于 2015-9-10 12:59
谢谢你的回答,不过我还有个疑问,这个模式赋值的时候,这个赋值需要重新定义吧,     mode=手工  就好比 ...


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

  6. int mode = BIZHANG;

  7. loop(){
  8.   switch(){
  9.     case xxx:
  10.        mode = BIZHANG;
  11.        break;
  12.     case xx2:
  13.        mode = XINGONGNENGA:
  14.        break;
  15.     ...
  16.   }
  17. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-10 15:39:00 | 显示全部楼层
1415926 发表于 2015-9-10 15:20
对的,我那个“手工”、“避障”就是表达一个意思,你肯定要用int型的,最好这样,不直接写1、2、3是因 ...

谢谢,我调试调试去
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-11 08:59:12 | 显示全部楼层
1415926 发表于 2015-9-10 15:20
对的,我那个“手工”、“避障”就是表达一个意思,你肯定要用int型的,最好这样,不直接写1、2、3是因 ...

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

使用道具 举报

发表于 2015-9-11 09:27:33 | 显示全部楼层
XXL 发表于 2015-9-11 08:59
你好,综合你两次给出的思路,小车的行走效果比之前好多了,解决了部分问题,但是还有一个小Bug,遥控 ...

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

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

如果还不行,你把这部分代码贴出来
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-11 14:10:12 | 显示全部楼层
1415926 发表于 2015-9-11 09:27
你的意思是,遥控器第一次切换有效,第二次开始无论按哪个键都无效?

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

嗯  解决了,是注释的时候注释了不该注释的,麻烦你了,谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-17 01:29 , Processed in 0.033632 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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