求助:一块Arduino板子,两个红外接收端的实现问题
本帖最后由 _Jasmine 于 2015-4-22 15:43 编辑需要在小车的前方和侧面各安装一个红外接收端。
目前能够实现单独一个的红外信号接收解码,效果良好,程序如下:
#include <IRremote.h>
const int irReceiverPin = 2;// 紅外線接收器 OUTPUT 訊號接在 pin 2
IRrecv irrecv(irReceiverPin);// 定義 IRrecv 物件來接收紅外線訊號
decode_results results; // 解碼結果將放在 decode_results 結構的 result 變數裏
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();// 啟動紅外線解碼
}
void loop()
{
if (irrecv.decode(&results))
{
// 解碼成功,收到一組紅外線訊號
// 印到 Serial port
Serial.print("irCode: ");
Serial.print(results.value, HEX); // 紅外線編碼
Serial.print(",bits: ");
Serial.println(results.bits); // 紅外線編碼位元數
irrecv.resume(); // 繼續收下一組紅外線訊號
}
}
解码后端口显示结果:
但是如果想要实现两个红外接收端各自接收红外信号解码,就会出现问题,不知道程序是哪里出错了?
/*
* IRRemote 紅外線遙控教學
* 範例 1.1: 接收紅外線
*/
#include <IRremote.h>
const int irReceiverPin = 2; // 紅外線接收器 OUTPUT 訊號接在 pin 2
IRrecv irrecv(irReceiverPin); // 定義 IRrecv 物件來接收紅外線訊號
decode_results results; // 解碼結果將放在 decode_results 結構的 results 變數裏
const int irReceiverPin2= 4; // 紅外線接收器 OUTPUT 訊號接在 pin 4
IRrecv irrecv2(irReceiverPin2);// 定義 IRrecv 物件來接收紅外線訊號
decode_results results2; // 解碼結果將放在 decode_results 結構的 results2 變數裏
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // 啟動紅外線解碼
irrecv2.enableIRIn(); // 啟動紅外線解碼
}
void loop()
{
if (irrecv.decode(&results))
{
showIRProtocol(results); // 顯示紅外線協定種類
irrecv.resume(); // 繼續收下一組紅外線訊號
}
delay(100);
if (irrecv2.decode(&results2))
{
showIRProtocol2(results2); // 顯示紅外線協定種類
irrecv2.resume(); // 繼續收下一組紅外線訊號
}
delay(100);
}
void showIRProtocol(decode_results results)
{
Serial.print("Protocol: ");
// 判斷紅外線協定種類
switch(results.decode_type)
{
case NEC:Serial.print("NEC");break;
case SONY:Serial.print("SONY");break;
case RC5:Serial.print("RC5");break;
case RC6:Serial.print("RC6");break;
default:Serial.print("Unknown encoding");
}
// 把紅外線編碼印到 Serial port
Serial.print(",irCode: ");
Serial.print(results.value, HEX); // 紅外線編碼
Serial.print(",bits: ");
Serial.println(results.bits); // 紅外線編碼位元數
}
void showIRProtocol2(decode_results results2)
{
Serial.print("Protocol2: ");
// 判斷紅外線協定種類
switch(results2.decode_type)
{
case NEC:Serial.print("NEC");break;
case SONY:Serial.print("SONY");break;
case RC5:Serial.print("RC5");break;
case RC6:Serial.print("RC6");break;
default:Serial.print("Unknown encoding");
}
// 把紅外線編碼印到 Serial port
Serial.print(",irCode2: ");
Serial.print(results2.value, HEX); // 紅外線編碼
Serial.print(",bits2: ");
Serial.println(results2.bits); // 紅外線編碼位元數
}
得到的结果很奇怪:
而且经过测试发现其实只有2号接收端在工作,但是很奇怪的是明明把1号接收端的连线拔掉了却还是会有如图所示的irCode输出。 大哥,问题解决了没有啊
我也有同样的问题
在线等 这种情况 是应用在异地遥控的场合。理论上讲 紅外線接收器 是应该采用并联使用的。即将不同的接收头的数据端同时接入单片机的相同端口。注意数据线的有效长度及合理的屏蔽。
同地 不同的遥控只要采用单一接收头,不同的遥控器即可,单片机 按不同的遥控编码执行不同的功能。 dcopyboy 发表于 2015-4-23 10:24
这种情况 是应用在异地遥控的场合。理论上讲 紅外線接收器 是应该采用并联使用的。即将不同的接收头的数据 ...
把接收头的信号线接到相同的端口还能分辨 出是那个接收头接收到的信号吗? 路过学习:P:P 能不能加个类似片选的控制试试
页:
[1]