极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12519|回复: 1

用红外遥控器控制数码管

[复制链接]
发表于 2013-7-4 15:14:56 | 显示全部楼层 |阅读模式
    作为新手,今天练习了弘毅大哥和强哥教程里的红外遥控器一节,并做了一点小改进,使用红外遥控器控制数码管显示。实现用0~1在数码管上显示0~1,用“+”“-”显示下一个数和上一个数,用播放键循环播放0到9的功能。由于初学,代码略显冗长,而且一些功能也不完善,比如暂停。在这里把实现贴出来,求喷以求进步。
    首先,数码管的1-10号针脚(详情请见http://www.geek-workshop.com/thread-2038-1-1.html)除3、8号外,分别对应ARDUINO上6、5、3、2、4、7、8、9端口。3号接口接3v3供电。红外接收器out脚接11端口实现通信。具体连线如图。
    代码如下,总共定义了遥控器上的13个按键,具体请看注释。
  1. #include <IRremote.h>
  2. /*************************
  3. IRreceiver
  4. *************************/
  5. const int irRecPin = 11;//定义红外信号接收引脚
  6. IRrecv irrecv(irRecPin);
  7. decode_results results;

  8. //定义红外遥控器每个按键发射的红外码,可以按照弘毅大哥的教程里的方式在串口监视器中查看确定
  9. long codes[13] =
  10. {
  11.   0xFF6897,
  12.   0xFF30CF, 0xFF18E7, 0xFF7A85,
  13.   0xFF10EF, 0xFF38C7, 0xFF5AA5,
  14.   0xFF42BD, 0xFF4AB5, 0xFF52AD,
  15.   0xFFE01F, 0xFFA857, 0xFFC23D  
  16. };
  17. /************************
  18. Digital cube
  19. ************************/
  20. //定义数码管的开关状态实现数字显示
  21. int digits[10][8] =
  22. {
  23.   {1,0,0,0,0,0,0,1},//0
  24.   {1,0,0,1,1,1,1,1},//1
  25.   {1,1,0,0,0,0,1,0},//2
  26.   {1,0,0,0,1,0,1,0},//3
  27.   {1,0,0,1,1,1,0,0},//4
  28.   {1,0,1,0,1,0,0,0},//5
  29.   {1,0,1,0,0,0,0,0},//6
  30.   {1,0,0,1,1,0,1,1},//7
  31.   {1,0,0,0,0,0,0,0},//8
  32.   {1,0,0,0,1,0,0,0} //9
  33. };
  34. int currentDigit = 0;//用来保存当前数字
  35. void digitWrite(int digit)//用来显示数字
  36. {
  37.   for(int pin = 2; pin <= 9 ; pin++)
  38.     digitalWrite(pin, digits[digit][pin - 2]);
  39. }
  40. /**************************
  41. Launch up
  42. **************************/
  43. void setup()
  44. {
  45.   Serial.begin(9600);
  46.   irrecv.enableIRIn();
  47.   
  48.   for(int i = 2 ; i <= 9 ; i++)
  49.   {
  50.     pinMode(i, OUTPUT);
  51.     digitalWrite(i, HIGH);
  52.   }
  53. }

  54. void loop()
  55. {
  56.   if(irrecv.decode(&results))
  57.   {   
  58.     for(int i = 0 ; i <=13 ; i++)
  59.     {
  60. //0~9按键对应显示0~9
  61.       if(results.value == codes[i] && i <= 9)
  62.       {  
  63.         digitWrite(i);
  64.         currentDigit = i;
  65.         break;
  66.       }
  67. //“-”按键对应显示上一个数字
  68.       else if(results.value == codes[10] && currentDigit != 0)
  69.       {
  70.         currentDigit--;
  71.         digitWrite(currentDigit);
  72.         break;
  73.       }
  74. //“+“对应显示下一个数字
  75.       else if(results.value == codes[11] && currentDigit != 9)
  76.       {
  77.         currentDigit++;
  78.         digitWrite(currentDigit);
  79.         break;
  80.       }
  81. //“播放”对应循环播放0~9
  82.       else if(results.value == codes[12] && stat == 0)
  83.       {
  84.         for(int j = 0 ; j <= 9 ; j++)
  85.         {  
  86.           digitWrite(j);
  87.           currentDigit = j;
  88.           delay(500);
  89.         }
  90.       }
  91.     }
  92. //可在串口监视器查看红外码
  93.     Serial.print(results.value, HEX);
  94.     Serial.println();
  95. //等待接收下一个信号
  96.     irrecv.resume();
  97.   }
  98.   delay(600);
  99. }
复制代码


本帖子中包含更多资源

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

x

评分

参与人数 1 +1 收起 理由
幻生幻灭 + 1 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2013-11-16 20:40:55 | 显示全部楼层
谢谢分享,想用遥控器控制蜂鸣器发出不同的音
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-10 04:12 , Processed in 0.038735 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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