红外遥控器

红外发射和接收的信号其实都是一连串的二进制脉冲码,高低电平按照一定的时间规律变换来传递相应的信息。为了使其在无线传输过程中免受其他信号的干扰,通常都将信号调制在特定的载波频率上(38K红外载波信号),通过红外发射二极管发射出去,而红外接收端则要将信号进行解调处理,还原成二进制脉冲码进行处理。

红外接收头有三个引脚,如图从左到右依次为VOUT、GND、VCC。红外遥控器发射的38K红外载波信号由遥控器里的编码芯片对其进行编码,具体编码方式和协议可在网上获取。当按下遥控器按键时,遥控器发出红外载波信号,红外接收器接收到信号,程序对载波信号进行解码,通过数据码的不同来判断按下的是哪个键。

红外遥控器

实物连接图

实物连接图

和下图的LCD组合就可以在液晶屏上显示接收到的代码。

LCD连接图

程序

注意:首先需要手动安装Irremote库。方法:在IDE中点击「项目」—「加载库」—「管理库」,查找「IRremote」进行安装。

#include <IRremote.h>
#include <LiquidCrystal.h>

// 初始化LCD库
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

int RECV_PIN = 8;
int LED_PIN = 13;

IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);
  
  lcd.begin(16, 2);
}

void loop() {
  if (irrecv.decode(&results)) {    
    lcd.clear();
    lcd.print(results.value,HEX);
    
    if (results.value == 0xFFA25D) //开灯的值
    {
      digitalWrite(LED_PIN, HIGH);
    } else if (results.value == 0xFFE21D) //关灯的值
    {
      digitalWrite(LED_PIN, LOW);
    }
    irrecv.resume(); // Receive the next value
  }
  delay(400);
}
文件下载(已下载 3 次)

发布时间:2019/9/1 下午7:28:42  阅读次数:2755

2006 - 2024,推荐分辨率 1024*768 以上,推荐浏览器 Chrome、Edge 等现代浏览器,截止 2021 年 12 月 5 日的访问次数:1872 万 9823 站长邮箱

沪 ICP 备 18037240 号-1

沪公网安备 31011002002865 号