【Arduino】红外控制LED

原文地址:https://www.cnblogs.com/hgxh/p/4109012.html

网上有关红外接收的帖子不少,但是关于使用arduino自制红外发射器的帖子却很少,经过网上搜索和自己摸索,给大家发个有arduino自制红外发射器控制led亮灭的例子。关于本例我使用了两块arduino板,一块用于发射,一块用于接收。

一、红外发射(开发板一)

/*
* 发射红外线讯号
*     注意! 红外线发射器(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)的编码,可以随意更改,如果要控制其他设备,只需将此编码改为相应编码就行
  }
}

将以上程序烧入开发板一中,发射部分就制作完毕。下面是红外接收部分。

二、红外接收(开发板二)

//本例来自于红外接收模块的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中有如下代码:

#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 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页