极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 23109|回复: 7

红外遥控接收之二发光二极管闪烁

[复制链接]
发表于 2012-10-28 20:22:31 | 显示全部楼层 |阅读模式
红外遥控接收之二发光二极管闪烁
在上次的基础上追加了一个发光二极管,当遥控器有按下按键时发光二极管闪烁.



实物图片


  1. //本例来自于红外接收模块的IRremote自带范例
  2. //已经作出了修改
  3. //改为当有遥控器的按键按下时,接在数字引脚4上的发光LED就会闪烁0.1秒
  4. /*电路连接
  5. *红外接收器的VOUT接在数字引脚11上,GND接控制板的GND,VCC接控制板上+5V
  6. *发光二极管引脚接在数字引脚4上,通过220欧姆电阻回到控制板的GND
  7. *效果,当遥控器按下按键时,发光二极管就会闪烁,同时电脑的串口会出现按键的命令编码.
  8. */
  9. /*
  10. * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
  11. * An IR detector/demodulator must be connected to the input RECV_PIN.
  12. * Version 0.1 July, 2009
  13. * Copyright 2009 Ken Shirriff
  14. * [url]http://arcfn.com[/url]
  15. */

  16. #include <IRremote.h>

  17. int RECV_PIN = 11;//定义红外接收器的引脚为11
  18. int LED_PIN=4;//定义发光LED引脚数字4
  19. IRrecv irrecv(RECV_PIN);

  20. decode_results results;

  21. void setup()
  22. {
  23.   Serial.begin(9600);
  24.   irrecv.enableIRIn(); // 初始化红外接收器
  25.   pinMode(LED_PIN,OUTPUT);//设置发光LED引脚数字4
  26. }

  27. void loop() {
  28.   if (irrecv.decode(&results)) {
  29.     Serial.println(results.value, HEX);//以16进制换行输出接收代码
  30.     Serial.println();//为了便于观看输出结果增加一个空行
  31.     digitalWrite(LED_PIN,HIGH);//LED点亮
  32.     delay(10);
  33.     digitalWrite(LED_PIN,LOW);//LED熄灭
  34.     irrecv.resume(); // 接收下一个值
  35.   }
  36. }

复制代码

运行效果:
按下遥控器按键时,发光二极管闪烁.
打开串口监视器,串口监视器中输出相应的按键的代码.

把代码修改一下,尝试用数字1点亮LED,数字2关闭LED.

代码如下:


  1. //本例来自于红外接收模块的IRremote自带范例
  2. //已经作出了修改

  3. /*电路连接
  4. *红外接收器的VOUT接在数字引脚11上,GND接控制板的GND,VCC接控制板上+5V
  5. *发光二极管引脚接在数字引脚4上,通过220欧姆电阻回到控制板的GND
  6. *效果,按键1点亮LED,按键2关闭LED.
  7. */
  8. /*
  9. * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
  10. * An IR detector/demodulator must be connected to the input RECV_PIN.
  11. * Version 0.1 July, 2009
  12. * Copyright 2009 Ken Shirriff
  13. * [url]http://arcfn.com[/url]
  14. */

  15. #include <IRremote.h>

  16. int RECV_PIN = 11;//定义红外接收器的引脚为11
  17. int LED_PIN=4;//定义发光LED引脚数字4
  18. IRrecv irrecv(RECV_PIN);

  19. decode_results results;

  20. void setup()
  21. {
  22.   Serial.begin(9600);
  23.   irrecv.enableIRIn(); // 初始化红外接收器
  24.   pinMode(LED_PIN,OUTPUT);//设置发光LED引脚数字4
  25. }

  26. void loop() {
  27.   if (irrecv.decode(&results))
  28.   {
  29.     if (results.value==16724175)  //确认接收到的第一排按键1的编码,此码是预先读出来的按键编码。
  30.     {
  31.     Serial.println(results.value, HEX);//以16进制换行输出接收代码
  32.     Serial.println();//为了便于观看输出结果增加一个空行
  33.    
  34.     digitalWrite(LED_PIN,HIGH);//LED点亮
  35.     Serial.println("点亮发光二极管tun on LED: "); //串口显示开灯

  36.     }
  37.     else if (results.value==16718055)  //确认接收到的第一排按键2的编码,此码是预先读出来的按键编码。
  38.     {
  39.       
  40.    
  41.     digitalWrite(LED_PIN,LOW);//LED熄灭
  42.     Serial.println(results.value, HEX);//以16进制换行输出接收代码
  43.     Serial.println();//为了便于观看输出结果增加一个空行
  44.     Serial.println("关发光二极管tun off LED: "); //串口显示关灯

  45.     }
  46.     irrecv.resume(); // 接收下一个值
  47.   }
  48. }
复制代码

运行效果图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-10-2 16:03:23 | 显示全部楼层
为什么按同样 一个键有时候返回码不一样呢?
回复 支持 1 反对 0

使用道具 举报

发表于 2012-10-30 07:52:08 | 显示全部楼层
学习红外,不错
回复 支持 反对

使用道具 举报

发表于 2013-1-31 20:48:40 | 显示全部楼层
本帖最后由 wsy0315 于 2013-1-31 21:13 编辑

按照你说的,我做了,但是我把编码换成了 “33B8609F” 的时候,显示不能编译

  1. //本例来自于红外接收模块的IRremote自带范例

  2. //已经作出了修改

  3. /*电路连接

  4. *红外接收器的VOUT接在数字引脚11上,GND接控制板的GND,VCC接控制板上+5V

  5. *发光二极管引脚接在数字引脚4上,通过220欧姆电阻回到控制板的GND

  6. *效果,按键1点亮LED,按键2关闭LED.

  7. */



  8. #include <IRremote.h>
  9. int RECV_PIN = 11;//定义红外接收器的引脚为11
  10. int LED_PIN = 4; //定义发光LED引脚数字4
  11. IRrecv irrecv(RECV_PIN);
  12. decode_results results;


  13. void setup()
  14. {
  15.     Serial.begin(9600);
  16.     irrecv.enableIRIn(); // 初始化红外接收器
  17.     pinMode(LED_PIN, OUTPUT); //设置发光LED引脚数字4
  18. }

  19. void loop()
  20. {
  21.   if (irrecv.decode(&results))
  22.     {
  23.         if (results.value == 33B8609F) //确认接收到的第一排按键1的编码,此码是预先读出来的按键编码。
  24.         {
  25.             Serial.println(results.value, HEX);//以16进制换行输出接收代码
  26.             Serial.println();//为了便于观看输出结果增加一个空行
  27.             digitalWrite(LED_PIN, HIGH); //LED点亮
  28.             Serial.println("点亮发光二极管tun on LED: "); //串口显示开灯
  29.         }
  30.         else if (results.value == 33B8A05F) //确认接收到的第一排按键2的编码,此码是预先读出来的按键编码。
  31.         {
  32.             digitalWrite(LED_PIN, LOW); //LED熄灭
  33.             Serial.println(results.value, HEX);//以16进制换行输出接收代码
  34.             Serial.println();//为了便于观看输出结果增加一个空行
  35.             Serial.println("关发光二极管tun off LED: "); //串口显示关灯
  36.         }
  37.         irrecv.resume(); // 接收下一个值
  38.     }
  39. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-2-1 00:36:07 | 显示全部楼层
       if (results.value == 33B8609F) //确认接收到的第一排按键1的编码,此码是预先读出来的按键编码。

换成
       if (results.value ==0x33B8609F)   试试,这个我没有测试过。
回复 支持 反对

使用道具 举报

发表于 2014-5-6 17:10:26 | 显示全部楼层
请问,如果同时需要用4个红外接收头,程序该怎么写?这样可以吗?
回复 支持 反对

使用道具 举报

发表于 2014-11-1 17:01:08 | 显示全部楼层
xuwenhua625 发表于 2014-5-6 17:10
请问,如果同时需要用4个红外接收头,程序该怎么写?这样可以吗?

,期待啊。
回复 支持 反对

使用道具 举报

发表于 2015-4-19 20:59:08 | 显示全部楼层
请问那个十六进制数怎样得到的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-6 15:40 , Processed in 0.043460 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表