Arduino教程传送门
红外遥控器:是一种通过红外线及时通讯的控制器,适用于那些需要机器设备状态调整的控制系统。在车载MP3、灯光设备、单片机开发板和遥控车等短距离控制场合中已经得到了普遍应用。本篇通过官方《IRremote》驱动库读出按键码值和实现LED灯的亮灭。
外形结构:主要是由遥控器由红外接收及发射电路、信号调理电路、中央控制器8031.程序及数据存储器、键盘及状态指示电路组成。
工作原理:
遥控器由红外接收及发射电路、信号调理电路、中央控制器程序及数据存储器、键盘及状态指示电路组成。
遥控器有两种状态:学习状态和控制状态。当遥控器处于学习状态时,使用者每按一个控制键,红外线接收电路就开始接收外来红外信号,同时将其转换成电信号,然后经过检波、整形、放大,再由CPU定时对其采样,将每个采样点的二进制数据以8位为一个单位,分别存放到指定的存储单元中去,供以后对该设备控制使用。当遥控器处于控制状态时,使用者每按下一个控制键,CPU从指定的存储单元中读取一系列的二进制数据,串行输出(位和位之间的时间间隔等于采样时的时间间隔)给信号保持电路,同时由调制电路进行信号调制,将调制信号经放大后,由红外线发射二极管进行发射,从而实现对该键对应设备功能的控制。(本次学习重点控制状态)
在使用前一定要记得给红外遥控器上电池,还有红外遥控器要结合红外接收模块使用,它负责将接收红外遥控器发射过来的信息并将其解码成十六进制码,这样才能实现既定的通信。(可以使用手机判断红外遥控器是否有电)
将红外接收模块与Arduino正确连接,其中S连接D3,VCC接+5V,GND接GND,并将其固定好;
实验原理图分别对应两个实验:
需要IRremote库文件。操作起来:点击Arduino IDE工具选择管理库 ,搜索IRremote选择IRRemoteControl安装,如果这个不行,删除后试试其他的
代码1:
#include
int RECV_PIN = 11;//定义红外接收器的引脚为11
IRrecv irrecv(RECV_PIN);
decode_results results;//注意这个数据类型
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // 初始化红外接收器
}
void loop() {
if (irrecv.decode(&results)) { //注意这里取解码结果的方法,传递的是变量指针。
Serial.println(results.value,HEX); //以16进制换行输出接收代码。注意取值方法【results.value】。
irrecv.resume(); // 给红外传送指令,让其继续接收下一个值。同315M无线接收一个道理。
}
}
代码2:
#include
long ir_item;
IRrecv irrecv_3(3);
decode_results results_3;
void setup(){
Serial.begin(9600);
pinMode(4, OUTPUT);
irrecv_3.enableIRIn();
}
void loop(){
if (irrecv_3.decode(&results_3)) {
ir_item=results_3.value;
String type="UNKNOWN";
String typelist[14]={"UNKNOWN", "NEC", "SONY", "RC5", "RC6", "DISH", "SHARP", "PANASONIC", "JVC", "SANYO", "MITSUBISHI", "SAMSUNG", "LG", "WHYNTER"};
if(results_3.decode_type>=1&&results_3.decode_type<=13){
type=typelist[results_3.decode_type];
}
Serial.print("IR TYPE:"+type+" ");
delay(150);
Serial.print("Receive: ");
Serial.println(ir_item);
if (ir_item == 0xE318261B) {
digitalWrite(4,HIGH);
Serial.println("Light turn on");
}
if (ir_item == 0xEE886D7F) {
digitalWrite(4,LOW);
Serial.println("Light turn off");
}
irrecv_3.resume();
} else {
}
}
红外遥控与Arduino实现小灯控制