原文地址:https://www.cnblogs.com/hgxh/p/4109012.html
网上有关红外接收的帖子不少,但是关于使用arduino自制红外发射器的帖子却很少,经过网上搜索和自己摸索,给大家发个有arduino自制红外发射器控制led亮灭的例子。关于本例我使用了两块arduino板,一块用于发射,一块用于接收。
一、红外发射(开发板一)
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 /* * 发射红外线讯号 * 注意! 红外线发射器(IR LED)必须接到 pin 3, 不能接其它脚位,头文件已经定义,所以下面不用设置pin3口的状态 */ #include <IRremote.h> // 引用 IRRemote 函式库 const int buttonPin = 4; // 按键(pushbutton)接在 pin 4 int buttonState = 0; // 按键状态 IRsend irsend; // 定义 IRsend 物件来发射红外线讯号 void setup() { pinMode(buttonPin, INPUT); // 把 buttonPin 设置成 输入 } void loop() { // 读取按键状态 buttonState = digitalRead(buttonPin); // 检查按键是否被按下 // 有的话 buttonState 会是高电平输出 if (buttonState == HIGH) { // 发射红外线讯号 irsend.sendNEC(0x4CB3817E, 32); // 这个编码即你按的键(接pin4)的编码,可以随意更改,如果要控制其他设备,只需将此编码改为相应编码就行 } }
将以上程序烧入开发板一中,发射部分就制作完毕。下面是红外接收部分。
二、红外接收(开发板二)
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 //本例来自于红外接收模块的IRremote自带范例 //已经作出了修改 //改为当有遥控器的按键按下时,接在数字引脚4上的发光LED就会点亮,再按一下按键,led熄灭 /*电路连接 *红外接收器的VOUT接在数字引脚11上,GND接控制板的GND,VCC接控制板上+5V *发光二极管引脚接在数字引脚4上,通过220欧姆电阻回到控制板的GND *效果,当遥控器按下按键时,发光二极管就会闪烁,同时电脑的串口会出现按键的命令编码. */ #include <IRremote.h> int RECV_PIN = 11;//定义红外接收器的引脚为11 int LED_PIN = 4; //定义发光LED引脚数字4 int a = 0; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // 初始化红外接收器 pinMode(LED_PIN, OUTPUT); //设置发光LED引脚数字4 } void loop() { if (irrecv.decode(&results)) { if (results.value == 0x4CB3817E & a == 0) //此处的32位值与发射部分发射的值要保持一致 { digitalWrite(LED_PIN, HIGH); //LED点亮 a = 1; } else if (results.value == 0x4CB3817E & a == 1) { digitalWrite(LED_PIN, LOW); //LED熄灭 a = 0; } irrecv.resume(); // 接收下一个值 } }
将以上部分程序烧入开发板二即完成接收部分制作。 两块开发板上电,当按下发射板上按键时,led点亮,再次按下发射板上按键是,led熄灭。
可能遇到的报错:
编译出错提示为:
提示出错的原因是:IRremoteTools冲突。百度一下原因为Arduino 1.5.5 r2以后加入的RobotIRremote 库与 IRremote库有冲突。在IRremoteTools.cpp中有如下代码:
1 2 3 4 5 6 7 #include "IRremote.h" #include "IRremoteTools.h" #include <Arduino.h> int RECV_PIN = TKD2; // the pin the IR receiver is connected to IRrecv irrecv(RECV_PIN); // an instance of the IR receiver object decode_results results; // container for received IR codes
上述代码中将TKD2赋予 RECV_PIN,而我们写的代码里并没有定义TKD2,因此编译程序执行到这时报错。 2. 删除或剪切走冲突文件 解决方法是在Arduino安装目录…Arduino\libraries\RobotIRremote\src 文件夹下将如下两个文件删除或剪切 到非编译搜索路径下的某个位置即可
本机安装的路径为:C:\Program Files (x86)\Arduino\libraries\RobotIRremote\src 作者:iracer 来源:CSDN 原文:https://blog.csdn.net/iracer/article/details/50082373 版权声明:本文为博主原创文章,转载请附上博文链接!