极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13603|回复: 9

【求助】关于红外遥控设置多个接收端口的问题~新人发帖~求关照

[复制链接]
发表于 2015-7-27 15:31:54 | 显示全部楼层 |阅读模式
新人发帖~~
本人最近在做Arduino红外遥控的研究,在学习了版主LEO大神的关于IRremote应用系列教程的文章http://www.geek-workshop.com/thread-3444-1-1.html后尝试自己制作。但遇到问题,特此来发帖求助。
我在制作一个多路的红外接收端,通常的红外接收器仅需要一个红外接收头即可,但因本人项目特殊,需要定义5个红外接收头,但实际编码操作后发现,IRremote库中的接受定义仿佛只能定义一个红外接收端口,例如

//本例来自于红外接收模块的IRremote自带范例
/*
* IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
* An IR detector/demodulator must be connected to the input RECV_PIN.
* Version 0.1 July, 2009
* Copyright 2009 Ken Shirriff
* http://arcfn.com
*/

#include <IRremote.h>

int RECV_PIN = 11;//定义红外接收器的引脚为11
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // 初始化红外接收器
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);//以16进制换行输出接收代码
    Serial.println();//为了便于观看输出结果增加一个空行
    irrecv.resume(); // 接收下一个值
  }
}


其中的这一句代码
IRrecv irrecv(RECV_PIN);
仅能定义一个红外接收器的引脚,本人在尝试定义多个时,采用了以下三种定义方式:
第一种:
IRrecv irrecv1(RECV_PIN1);
IRrecv irrecv2(RECV_PIN2);

第二种:
IRrecv irrecv1(RECV_PIN1),IRrecv irrecv2(RECV_PIN2);

在实际运行后发现,Arduino仅能讲后定义的端口设定为红外接收端口,而之前定义的端口均消失无反应,个人推断问题应该是出现在IRremote的库中,但因本人才疏学浅,并不会修改库文件,特此来发帖,求大神讲解解决方案。。。感激不尽。。。
库文件地址http://www.geek-workshop.com/for ... 3fDQ5NjI5fDI0MzM%3D
回复

使用道具 举报

 楼主| 发表于 2015-7-27 15:35:13 | 显示全部楼层

RE: 【求助】关于红外遥控设置多个接收端口的问题~新人发帖~求关照

这个是示例代码
  1. //本例来自于红外接收模块的IRremote自带范例
  2. /*
  3. * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
  4. * An IR detector/demodulator must be connected to the input RECV_PIN.
  5. * Version 0.1 July, 2009
  6. * Copyright 2009 Ken Shirriff
  7. * http://arcfn.com
  8. */

  9. #include <IRremote.h>

  10. int RECV_PIN = 11;//定义红外接收器的引脚为11
  11. IRrecv irrecv(RECV_PIN);
  12. decode_results results;

  13. void setup()
  14. {
  15.   Serial.begin(9600);
  16.   irrecv.enableIRIn(); // 初始化红外接收器
  17. }

  18. void loop() {
  19.   if (irrecv.decode(&results)) {
  20.     Serial.println(results.value, HEX);//以16进制换行输出接收代码
  21.     Serial.println();//为了便于观看输出结果增加一个空行
  22.     irrecv.resume(); // 接收下一个值
  23.   }
  24. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2015-7-27 15:46:41 | 显示全部楼层
这个比较难,涉及到底层中断的修改。可以详细说说你的5路输入的实现方式和应用场景,或许有其他的解决方案
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-27 16:02:58 | 显示全部楼层
幻生幻灭 发表于 2015-7-27 15:46
这个比较难,涉及到底层中断的修改。可以详细说说你的5路输入的实现方式和应用场景,或许有其他的解决方案
...

好的LEO大神。
本人设计制作一个智能航行器根据要求,所设计的智能航行器需要能接收由水中光电门所发出的红外信号并寻源自主航行通过光电门,光电门所发出的红外信号编码采用海尔电视遥控器38K的标准编码(编码问题我已解决),现在的问题是为了提高精度,我设计了一个5路的接收器,方便接收0~180度的红外信号,而根据设计我的接收器,需要5路红外接收,所以,问题就出在了这里。。。目前智能有一路红外接收
回复 支持 反对

使用道具 举报

发表于 2015-7-27 16:47:47 | 显示全部楼层
一路连5个呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-27 17:31:00 | 显示全部楼层
wdjkzym 发表于 2015-7-27 16:47
一路连5个呢

不行。。。一路连五个,五个口我需要分别处理
回复 支持 反对

使用道具 举报

发表于 2015-7-27 17:51:00 | 显示全部楼层
可否用五个MOSFET管去控制这五个红外接收模块和接收口的通断?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-27 18:33:21 | 显示全部楼层
lkc8210 发表于 2015-7-27 17:51
可否用五个MOSFET管去控制这五个红外接收模块和接收口的通断?

可以说的稍微详细点么?本人比较笨
回复 支持 反对

使用道具 举报

发表于 2015-7-28 00:36:42 | 显示全部楼层
lgs19960514 发表于 2015-7-27 18:33
可以说的稍微详细点么?本人比较笨

我说错了,应该是Arduino用5个OUTPUT Pin 去控制5个MOSFET管的通断
而这5个MOSFET管的主要功用就是通断那5个红外接收模块的电源
回复 支持 反对

使用道具 举报

发表于 2015-7-30 07:56:16 | 显示全部楼层
去搜搜X-Bot吧,一个群体机器人,有红外定位解决方案
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-18 06:50 , Processed in 0.071640 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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