红外遥控

常用红外协议资料IRremote库 – 太极创客 (taichi-maker.com)

 

1838红外接收器

1838红外接收器引脚 Arduino引脚
OUT 11
VCC +5V
GND GND

红外接收(NEC协议)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <IRremote.h>
#define RECV_PIN 11

IRrecv irrecv(RECV_PIN); // 红外遥控初始化
decode_results results; // 储存接收到的红外遥控信息

void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
Serial.begin(9600);
Serial.println("Enabling IRin");
irrecv.enableIRIn(); // 启动红外接收
Serial.println("Enabled IRin");
}

void loop() {
/*
decode()库函数用于判断红外接收器所接收到的红外信号是否可以被解析。
如可以成功解析,则返回非零数值。并将解析结果存储于results中。
如无法成功解析,则返回零。

每一次解析完成,都需要调用resume()函数从而让Arduino开始准备接收下一个红外
遥控指令。
*/
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX); // results.value为红外遥控信号的具体数值

if(results.value == 0xF7C03F) //如果控制信息数值为F7C03F
{
Serial.println("Command Received: Turn On LED.");
digitalWrite(LED_BUILTIN, HIGH);
}

if(results.value == 0xF740BF) //如果控制信息数值为F740BF
{
Serial.println("Command Received: Turn Off LED.");
digitalWrite(LED_BUILTIN, LOW);
}

irrecv.resume(); // 恢复接收下一个红外遥控信号
}
delay(100);
}

 

信号发射

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <IRremote.h>
IRsend irsend;

void setup() {
}

void loop() {
for (int i = 0; i < 3; i++) {
irsend.sendNEC(0xF7C03F, 32); //发射NEC红外遥控协议F7C03F指令码,16进制每个占用4bit,所以一共32个bit
delay(40);
}
/*
*
* IRremote库支持NEC, Sony, Philips RC5, Philips RC6等协议指令。
* 本示例程序中Arduino将通过调用函数sendSony(0xa90, 12) 来发射Sony协议指令。
* 该函数的两个参数中, 0xa90为指令信息内容,12位指令信息位数。
*
* 假如需要发射NEC协议指令则可以调用函数sendNEC(0xF7C03F, 32)。
* 其中0xF740BF为指令信息内容,32位指令信息位数。
*
* 如果需要发射其它遥控协议指令请参考以下程序代码:
* sendNEC(unsigned long data, int nbits); //发射NEC协议指令
* sendSony(unsigned long data, int nbits); //发射Sony协议指令
* void sendRC5(unsigned long data, int nbits); //发射Philips RC5协议指令
* void sendRC6(unsigned long data, int nbits); //发射Philips RC6协议指令
* void sendSharp(unsigned long data, int nbits); //发射Sharp协议指令
* void sendPanasonic(unsigned int address, unsigned long data); //发射Panasonic协议指令
* void sendJVC(unsigned long data, int nbits, int repeat); //发射JVC协议指令
* void sendRaw(unsigned int buf[], int len, int hz); //发射原始指令
*/
delay(5000); //延迟5秒
}
  • 红外LED发射的信号具有方向性
  • 控制距离最远不超过2-3米
  • 需要为红外LED配限流电阻