|
本帖最后由 _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输出。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|