极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13268|回复: 6

求助:一块Arduino板子,两个红外接收端的实现问题

[复制链接]
发表于 2015-4-22 15:44:54 | 显示全部楼层 |阅读模式
本帖最后由 _Jasmine 于 2015-4-22 15:43 编辑

需要在小车的前方和侧面各安装一个红外接收端。
目前能够实现单独一个的红外信号接收解码,效果良好,程序如下:
  1. #include <IRremote.h>  
  2. const int irReceiverPin = 2;  // 紅外線接收器 OUTPUT 訊號接在 pin 2
  3. IRrecv irrecv(irReceiverPin);// 定義 IRrecv 物件來接收紅外線訊號
  4. decode_results results;                  // 解碼結果將放在 decode_results 結構的 result 變數裏

  5. void setup()
  6. {
  7.   Serial.begin(9600);
  8.   irrecv.enableIRIn();  // 啟動紅外線解碼
  9. }

  10. void loop()
  11. {
  12.   if (irrecv.decode(&results))
  13.   {
  14.     // 解碼成功,收到一組紅外線訊號
  15.     // 印到 Serial port
  16.     Serial.print("irCode: ");           
  17.     Serial.print(results.value, HEX);    // 紅外線編碼
  18.     Serial.print(",  bits: ");         
  19.     Serial.println(results.bits);        // 紅外線編碼位元數
  20.     irrecv.resume(); // 繼續收下一組紅外線訊號      
  21.   }
  22. }
复制代码


解码后端口显示结果:

但是如果想要实现两个红外接收端各自接收红外信号解码,就会出现问题,不知道程序是哪里出错了?

  1. /*
  2. * IRRemote 紅外線遙控教學
  3. *   範例 1.1: 接收紅外線
  4. */
  5. #include <IRremote.h>

  6. const int irReceiverPin = 2; // 紅外線接收器 OUTPUT 訊號接在 pin 2
  7. IRrecv irrecv(irReceiverPin);   // 定義 IRrecv 物件來接收紅外線訊號
  8. decode_results results;   // 解碼結果將放在 decode_results 結構的 results 變數裏

  9. const int irReceiverPin2= 4;    // 紅外線接收器 OUTPUT 訊號接在 pin 4
  10. IRrecv irrecv2(irReceiverPin2);  // 定義 IRrecv 物件來接收紅外線訊號
  11. decode_results results2;    // 解碼結果將放在 decode_results 結構的 results2 變數裏

  12. void setup()
  13. {
  14.   Serial.begin(9600);   
  15.   irrecv.enableIRIn();   // 啟動紅外線解碼
  16.   irrecv2.enableIRIn();   // 啟動紅外線解碼
  17. }

  18. void loop()
  19. {
  20.   if (irrecv.decode(&results))
  21.   {
  22.     showIRProtocol(results);    // 顯示紅外線協定種類
  23.     irrecv.resume();    // 繼續收下一組紅外線訊號      
  24.   }
  25.   delay(100);
  26.   if (irrecv2.decode(&results2))
  27.   {
  28.     showIRProtocol2(results2);     // 顯示紅外線協定種類
  29.     irrecv2.resume();       // 繼續收下一組紅外線訊號      
  30.   }
  31.   delay(100);
  32. }


  33. void showIRProtocol(decode_results results)
  34. {
  35.   Serial.print("Protocol: ");
  36.   // 判斷紅外線協定種類
  37.   switch(results.decode_type)
  38.   {
  39.     case NEC:Serial.print("NEC");break;
  40.     case SONY:Serial.print("SONY");break;
  41.     case RC5:Serial.print("RC5");break;
  42.     case RC6:Serial.print("RC6");break;
  43.     default:Serial.print("Unknown encoding");
  44.   }
  45.   // 把紅外線編碼印到 Serial port
  46.   Serial.print(",  irCode: ");           
  47.   Serial.print(results.value, HEX);    // 紅外線編碼
  48.   Serial.print(",  bits: ");         
  49.   Serial.println(results.bits);        // 紅外線編碼位元數
  50. }

  51. void showIRProtocol2(decode_results results2)
  52. {
  53.   Serial.print("Protocol2: ");
  54.   // 判斷紅外線協定種類
  55.   switch(results2.decode_type)
  56.   {
  57.     case NEC:Serial.print("NEC");break;
  58.     case SONY:Serial.print("SONY");break;
  59.     case RC5:Serial.print("RC5");break;
  60.     case RC6:Serial.print("RC6");break;
  61.     default:Serial.print("Unknown encoding");
  62.   }
  63.   // 把紅外線編碼印到 Serial port
  64.   Serial.print(",  irCode2: ");           
  65.   Serial.print(results2.value, HEX);    // 紅外線編碼
  66.   Serial.print(",  bits2: ");         
  67.   Serial.println(results2.bits);        // 紅外線編碼位元數
  68. }
复制代码


得到的结果很奇怪:

而且经过测试发现其实只有2号接收端在工作,但是很奇怪的是明明把1号接收端的连线拔掉了却还是会有如图所示的irCode输出。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-5-18 16:27:35 | 显示全部楼层
大哥,问题解决了没有啊
我也有同样的问题
在线等
回复 支持 1 反对 0

使用道具 举报

发表于 2015-4-23 10:24:16 | 显示全部楼层
这种情况 是应用在异地遥控的场合。理论上讲 紅外線接收器 是应该采用并联使用的。即将不同的接收头的数据端同时接入单片机的相同端口。注意数据线的有效长度及合理的屏蔽。
同地 不同的遥控只要采用单一接收头,不同的遥控器即可,单片机 按不同的遥控编码执行不同的功能。
回复 支持 反对

使用道具 举报

发表于 2017-6-8 22:56:46 | 显示全部楼层
dcopyboy 发表于 2015-4-23 10:24
这种情况 是应用在异地遥控的场合。理论上讲 紅外線接收器 是应该采用并联使用的。即将不同的接收头的数据 ...

把接收头的信号线接到相同的端口还能分辨 出是那个接收头接收到的信号吗?
回复 支持 反对

使用道具 举报

发表于 2017-6-27 08:14:32 | 显示全部楼层
能不能加个类似片选的控制试试
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-18 23:16 , Processed in 0.049178 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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