项目二十三 红外发射#

1.实验说明#

在这个套件中,有一个红外发射传感器,它主要用到了红外发射管。它是一个能发射出特定波长红外光的二极管。我们可以将传感器连接到单片机上,利用编程,控制传感器发射出38KHz调制信号,可适应市面上各种红外接收头,以便红外线接收传感器能接收到,从而实现红外无线通讯。

实验中,我们利用红外发射传感器发射对应数据,每发射一次数据,传感器上的D1 LED就闪烁一次。

2.实验器材#

  • keyes brick 红外发射传感器*1

  • keyes UNO R3开发板*1

  • 传感器扩展板*1

  • 3P 双头XH2.54连接线*1

  • USB线*1

3.接线图#

7a0b86725a72e316022a5cfbb726db9a

4.测试代码#

编译上传之前我们先安装库文件IRremote.hSimpleTimer.h,安装方法请看到Arduino 基础教程中查看。

注意需要使用我们提供的库文件不要随意更新,否则可能出现不兼容情况。

// 引入红外遥控库,用于发送和接收红外信号
#include <IRremote.h>

// 引入SimpleTimer库,用于实现定时器功能(非阻塞式延迟)
#include <SimpleTimer.h>

// 创建一个红外发送对象,使用数字引脚3作为红外信号输出引脚
IRsend irsend_3(3);

// 创建一个SimpleTimer定时器对象
SimpleTimer timer;

// 定时器回调函数:当定时器触发时执行此函数
void Simple_timer_1() {
  // 发送一个32位的RC5红外编码信号,数据值为0x89ABCDEF
  irsend_3.sendRC5(0x89ABCDEF, 32);
}

// 初始化函数,在程序开始时执行一次
void setup() {
  // 设置定时器:每1000毫秒(1秒)触发一次Simple_timer_1函数
  // L后缀表示长整型,确保时间值正确
  timer.setInterval(1000L, Simple_timer_1);
}

// 主循环函数,会重复执行
void loop() {
  // 运行定时器,检查并执行到期的定时任务
  // 这种非阻塞方式允许在等待期间执行其他操作
  timer.run();
}

5.代码说明#

  1. #include <IRremote.h> 添加红外库,这个库包含发射红外信号与接收红外信号的功能

  2. IRsend irsend_3(3); 创建红外发射对象,并设置红外信号的输出引脚为D3

  3. irsend_3.sendRC5(0x89ABCDEF, 32); 发射数据值为0x89ABCDEF

  4. delay(1000); 延时很重要,一定要有不然发射红外信号太快会乱的

6.测试结果#

按照接线图接线,上传测试代码成功,红外发射模块就会每个一秒钟发射一次红外值,发射时模块上的红色LED灯会闪烁一下。