knightsky 发表于 2014-10-14 16:42:39

红外发射和接收求助

本帖最后由 knightsky 于 2014-10-14 16:49 编辑

我想用arduino同时进行红外发射和接收,自发自收实验。发射头和接收头同时连接在板子上,用下面的程序。先进行红外发射,然后接收,点亮led。可是只能发射,不能进行接收。这时用外部的遥控器也不能被接收了。这是怎么回事?串口里只会显示发射信息。我该如何进行修改?请大家帮忙。

#include <IRremote.h>// 使用IRRemote函数库

const int irReceiverPin = 11;// 红外接收器的 OUTPUT 引脚接在 PIN2 接口 定义irReceiverPin变量为PIN2接口
int led=13;
IRrecv irrecv(irReceiverPin); // 设置irReceiverPin定义的端口为红外信号接收端口
IRsend irsend;
decode_results results;    // 定义results变量为红外结果存放位置

void setup()
{
Serial.begin(9600);   // 开启串口,波特率为9600
irrecv.enableIRIn();   // 启动红外解码
}

void loop()
{
Serial.println("SendIR: ");
irsend.sendNEC(0xC26BF044, 32);   
delay(1000);
if (irrecv.decode(&results)) {   // 解码成功,把数据放入results变量中
if (results.value==0xC26BF044){
      digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
      delay(1000);               // wait for a second
      digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
      delay(1000);
}
    // 把数据输入到串口
    Serial.print("irCode: ");            
    Serial.print(results.value, HEX); // 显示红外编码
    Serial.print(",bits: ");         
    Serial.println(results.bits); // 显示红外编码位数
    irrecv.resume();    // 继续等待接收下一组信号
}
delay(600); //延时600毫秒
}

贱客 发表于 2014-10-14 17:33:10

程序指令顺序执行的,即使没有 delay(1000)估计也收不到信号。 irsend 完序列之后光子早不知道飞哪里去了

knightsky 发表于 2014-10-14 18:23:51

贱客 发表于 2014-10-14 17:33 static/image/common/back.gif
程序指令顺序执行的,即使没有 delay(1000)估计也收不到信号。 irsend 完序列之后光子早不知道飞哪里去了

那请问,程序该怎么写可以实现呢?

贱客 发表于 2014-10-15 11:45:35

knightsky 发表于 2014-10-14 18:23 static/image/common/back.gif
那请问,程序该怎么写可以实现呢?

“同时”是做不到的,显然实现不了自发自收。
接收然后转发这是可以的。

knightsky 发表于 2014-10-15 19:37:03

贱客 发表于 2014-10-15 11:45 static/image/common/back.gif
“同时”是做不到的,显然实现不了自发自收。
接收然后转发这是可以的。

了解了,谢谢你
页: [1]
查看完整版本: 红外发射和接收求助