极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 28733|回复: 6

利用Arduino上的atmega8u2制作红外遥控版PPT控制器

[复制链接]
发表于 2013-4-6 09:30:35 | 显示全部楼层 |阅读模式
演示:
           

原理:
          通过USBASP给Arduino板载的usb转串口芯片刷入新的固件,使其连接电脑时能被识别为键盘。PPT程序打开时,F5键为从头开始放映,方向键右为下一张,方向键左上一张,ESC键为退出放映。目前实现了这么四个键,还可以扩展,源码简单,其余靠各位想象吧。

所需物品:
            1.USBASP
            2.带atmega8u2的Arduino开发板(如果是atmega16u2,应该需要更换固件,但我这里没有实验的条件)
            3.杜邦线
            4.打印机线
            5.红外线一体接收头
            6.红外遥控器

制作:
          1.根据源代码注释,连接好线路
          2.编译后面提供的代码,并写入atmega2560
          3.,断开Arduino与电脑连接,将USBASP与atmega8u2的ISP接口相连,然后连接电脑,使用avr_fighter上写入Arduino-keyboard-0.3-mega2560.hex这个程序,这里芯片选的是atmega8,烧写前最好备份原固件,不过Arduino官网也提供下载
          4.将Arduino重新与电脑连接,此时电脑会识别到一个USB键盘并进行驱动安装,安装完驱动,打开Power Point程序即可以控制


图片说明:
连接图:
            

关于USBASP与ISP:
            

烧写界面:
            

源代码:
  1. #include <IRremote.h>

  2. #define RECV_PIN 2
  3. #define CODE_PLAY 0xFFC23D
  4. #define CODE_NEXT 0xFF02FD
  5. #define CODE_PREV 0xFF22DD
  6. #define CODE_EXIT 0xFF906F
  7. #define MOD_CONTROL_LEFT    (1<<0)
  8. #define MOD_SHIFT_LEFT      (1<<1)
  9. #define MOD_ALT_LEFT        (1<<2)
  10. #define MOD_GUI_LEFT        (1<<3)
  11. #define MOD_CONTROL_RIGHT   (1<<4)
  12. #define MOD_SHIFT_RIGHT     (1<<5)
  13. #define MOD_ALT_RIGHT       (1<<6)
  14. #define MOD_GUI_RIGHT       (1<<7)
  15. #define KEY_A       4
  16. #define KEY_B       5
  17. #define KEY_C       6
  18. #define KEY_D       7
  19. #define KEY_E       8
  20. #define KEY_F       9
  21. #define KEY_G       10
  22. #define KEY_H       11
  23. #define KEY_I       12
  24. #define KEY_J       13
  25. #define KEY_K       14
  26. #define KEY_L       15
  27. #define KEY_M       16
  28. #define KEY_N       17
  29. #define KEY_O       18
  30. #define KEY_P       19
  31. #define KEY_Q       20
  32. #define KEY_R       21
  33. #define KEY_S       22
  34. #define KEY_T       23
  35. #define KEY_U       24
  36. #define KEY_V       25
  37. #define KEY_W       26
  38. #define KEY_X       27
  39. #define KEY_Y       28
  40. #define KEY_Z       29
  41. #define KEY_1       30
  42. #define KEY_2       31
  43. #define KEY_3       32
  44. #define KEY_4       33
  45. #define KEY_5       34
  46. #define KEY_6       35
  47. #define KEY_7       36
  48. #define KEY_8       37
  49. #define KEY_9       38
  50. #define KEY_0       39
  51. #define KEY_ENTER   40
  52. #define KEY_ESCAPE  41
  53. #define KEY_BACKSPACE  42
  54. #define KEY_TAB     43
  55. #define KEY_SPACE   44
  56. #define KEY_MINUS   45
  57. #define KEY_EQUALS  46
  58. #define KEY_LBRACKET 47
  59. #define KEY_RBRACKET 48
  60. #define KEY_BACKSLASH 49
  61. #define KEY_NONUS_NUMBER 50
  62. #define KEY_SEMICOLON 51
  63. #define KEY_QUOTE   52
  64. #define KEY_TILDE   53
  65. #define KEY_COMMA   54
  66. #define KEY_PERIOD  55
  67. #define KEY_SLASH   56
  68. #define KEY_CAPSLOCK 57
  69. #define KEY_F1      58
  70. #define KEY_F2      59
  71. #define KEY_F3      60
  72. #define KEY_F4      61
  73. #define KEY_F5      62
  74. #define KEY_F6      63
  75. #define KEY_F7      64
  76. #define KEY_F8      65
  77. #define KEY_F9      66
  78. #define KEY_F10     67
  79. #define KEY_F11     68
  80. #define KEY_F12     69
  81. #define KEY_PRNTSCRN    70
  82. #define KEY_SCROLLLOCK  71
  83. #define KEY_PAUSE       72
  84. #define KEY_INSERT      73
  85. #define KEY_HOME        74
  86. #define KEY_PAGEUP      75
  87. #define KEY_DELETE      76
  88. #define KEY_END         77
  89. #define KEY_PAGEDOWN    78
  90. #define KEY_RIGHT_ARROW 79
  91. #define KEY_LEFT_ARROW  80
  92. #define KEY_DOWN_ARROW  81
  93. #define KEY_UP_ARROW    82
  94. #define KEY_NUM_LOCK    83
  95. #define KEY_NUM_DIV     84
  96. #define KEY_NUM_MUL     85
  97. #define KEY_NUM_SUB     86
  98. #define KEY_NUM_ADD     87
  99. #define KEY_NUM_ENTER   88
  100. #define KEY_NUM_1       89
  101. #define KEY_NUM_2       90
  102. #define KEY_NUM_3       91
  103. #define KEY_NUM_4       92
  104. #define KEY_NUM_5       93
  105. #define KEY_NUM_6       94
  106. #define KEY_NUM_7       95
  107. #define KEY_NUM_8       96
  108. #define KEY_NUM_9       97
  109. #define KEY_NUM_0       98
  110. #define KEY_NUM_DOT     99
  111. #define KEY_ARROW_LEFT 0x50

  112. IRrecv irrecv(RECV_PIN);
  113. decode_results results;
  114. uint8_t buf[8] = { 0 };

  115. void releaseKey()
  116. {
  117.   buf[0] = 0;
  118.   buf[2] = 0;
  119.   Serial.write(buf, 8); // Release key  
  120. }

  121. void setup()
  122. {
  123.   Serial.begin(9600);
  124.   irrecv.enableIRIn(); //初始化红外遥控
  125.   //pinMode(13,1);
  126. }

  127. void loop() {
  128.                   if (irrecv.decode(&results)) {
  129.                         if(results.value == CODE_PLAY){
  130.                                    //Serial.println("You Press Play button");
  131.                       buf[2] = KEY_F5;
  132.                       Serial.write(buf, 8);
  133.                       releaseKey();
  134.                           }
  135.                           else if(results.value == CODE_NEXT) {
  136.                                     //Serial.println("You Press Next button");
  137.                       buf[2] = KEY_RIGHT_ARROW;
  138.                       Serial.write(buf, 8);
  139.                       releaseKey();
  140.                           }
  141.                           else if(results.value == CODE_PREV){
  142.                                   //Serial.println("You Press Prcv button");
  143.                       buf[2] = KEY_LEFT_ARROW;
  144.                       Serial.write(buf, 8);
  145.                       releaseKey();
  146.                           }
  147.                           else if(results.value == CODE_EXIT){
  148.                                   //Serial.println("You Press Exit button");
  149.                       buf[2] = KEY_ESCAPE;
  150.                       Serial.write(buf, 8);
  151.                       releaseKey();
  152.                           }
  153.                           /*
  154.                           else {
  155.                                   Serial.println("You Press Unknown button!");
  156.                           }
  157.                           */
  158.                             irrecv.resume(); // 接收下一个值
  159.                     }
  160. }
复制代码














本帖子中包含更多资源

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

x
回复

使用道具 举报

 发表于 2013-4-6 09:47:39
转播微博[tthread=q924414889, 青伊必争]http://app.qlogo.cn/mbloghead/792461ab49809187ae3e[/tthread]
回复 支持 反对

使用道具

发表于 2013-4-7 13:08:30 | 显示全部楼层
呵呵,东西做的不错,就是感觉用了牛刀!
回复 支持 反对

使用道具 举报

发表于 2013-4-19 17:56:49 | 显示全部楼层
好帖子,顶!
回复 支持 反对

使用道具 举报

发表于 2014-11-29 13:37:40 | 显示全部楼层
楼主,有原来的固件吗。。按照你的做法实现了。现在想要还原,找不到固件了。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-19 17:17:02 | 显示全部楼层
GW.wangshuo 发表于 2014-11-29 13:37
楼主,有原来的固件吗。。按照你的做法实现了。现在想要还原,找不到固件了。。。。

arduino官网有哦
回复 支持 反对

使用道具 举报

发表于 2016-1-20 09:00:58 | 显示全部楼层
@Rooting大哥,固件怎么制作呢?
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 22:31 , Processed in 0.047189 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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