极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 62056|回复: 16

mega2560 USB第二季KEYBOARD HID

[复制链接]
发表于 2012-6-14 09:59:30 | 显示全部楼层 |阅读模式
作者:邓帅哥——大人
不要崇拜哥,哥为人民服务,哥已不在社区,但社区的每一个角落都流传着哥的传说。
Now,镜头转入正题,mega2560 USB第二季KEYBOARD HID
首先,你必须有一片arduino主板,而且主板上必须有一片atmega8U2/atmega16U2/支持usb的芯片+mega主芯片(mega328,128,1280,2560.......),操作前请导入附件的USB库
step1:
将下列arduino代码通过arduion下载到arduino板子上,它的功能是,当你按键NumLock三次的时候,它会模拟按键输入一排信息,改变Keyboard.print内的操作即可以改变你想要的按键。
  1. /* Arduino USB Business Card
  2.    1. Upload this program to Arduino
  3.    2. Upgrade atmega8u2 with firmware/Arduino-keyboard-0.3.hex
  4.    3. Re-plug Arduino to usb port, and pressed Num Lock button 3 times in 2 seconds
  5.       Arduino will type your contact text information into the text editor
  6. */
  7. #include <USBKeyboard.h>

  8. const uint8_t KEYBOARD_LED = LED_NUMLOCK; // Num Lock LED
  9. const int ledPin =  13;                  
  10. uint8_t lastState = 0, currentState = 0;

  11. void setup()
  12. {
  13.   pinMode(ledPin, OUTPUT);
  14.   Keyboard.init();
  15. }

  16. // return true if KEYBOARD_LED (Num Lock button) is pressed
  17. boolean buttonPressed()
  18. {
  19.   uint8_t ledStatus;

  20.   ledStatus = Keyboard.readLedStatus();

  21.   // Arduino Led pin as an indicator   
  22.   // If Num Lock led is on, the led indicator will be on
  23.   if (ledStatus & KEYBOARD_LED) {
  24.     digitalWrite(ledPin, HIGH);   
  25.   } else {
  26.     digitalWrite(ledPin, LOW);
  27.   }        

  28.   lastState = currentState;
  29.   currentState = ledStatus & KEYBOARD_LED;  
  30.   
  31.   return (currentState != lastState);
  32. }

  33. void sendContactInfo()
  34. {
  35.   Keyboard.print("dengshuaige");
  36.   Keyboard.sendKeyStroke(KEY_ENTER);
  37.   Keyboard.print("Email: [email][email protected][/email]");
  38.   Keyboard.sendKeyStroke(KEY_ENTER);
  39.   Keyboard.print("dengshuaige.com");
  40.   Keyboard.sendKeyStroke(KEY_ENTER);
  41. }

  42. void loop()
  43. {
  44.   int counter;
  45.   
  46.   delay(100);

  47.   // Check whether KEYBOARD_LED is pressed 3 times in 2 seconds
  48.   if (buttonPressed()) {
  49.     counter = 1;
  50.     for (int i = 0; i < 20; i++) {
  51.       delay(100);
  52.       if (buttonPressed()) counter = counter + 1;      
  53.       
  54.       // Send my information to computer
  55.       if (counter >= 3) {
  56.         sendContactInfo();
  57.         break;
  58.       }
  59.     }      
  60.     counter = 0;                  // reset counter
  61.   }  
  62. }
复制代码
下载到mega2560后,板子还是不能工作的,请继续往下看,
step2:将Arduino-keyboard-0.3-mega2560.hex通过烧录器烧到mega8U2上面


哥用的是USBasp,淘宝15——20元一个。

OK,将mega8u2烧好之后,
连接arduino的USB线,你可以看见在键盘下方多了一个HID keyboard device(不需要安装任何驱动),哈哈,这时,你可以用你自已做的键盘了。


测试一下,新建一个文本,打开,光标输入到文本,按三次NumLock键,得到如下:



USB第三季预告(AVR篇)用mega8单独打造USB键盘...掌声~~~~

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2012-6-14 10:01:15 | 显示全部楼层
你发的帖子很不错,现在正需要这些东西,谢谢,向你学习!
回复 支持 反对

使用道具 举报

发表于 2012-6-14 10:05:41 | 显示全部楼层
顺手将代码高亮了。。
回复 支持 反对

使用道具 举报

发表于 2012-6-14 10:29:48 | 显示全部楼层
不错呀
回复 支持 反对

使用道具 举报

发表于 2012-6-14 10:51:18 | 显示全部楼层
很喜欢ADK的说,可以和andorid一起做出很多有趣的事情来,楼主这方面懂的比较多,希望您能继续做些东西出来供大家一起学习,谢谢!
回复 支持 反对

使用道具 举报

发表于 2012-7-10 16:48:50 | 显示全部楼层
高人呀 啥时候能模拟 鼠标!
回复 支持 反对

使用道具 举报

发表于 2012-10-22 08:35:00 | 显示全部楼层
这个必须支持下...高手...
回复 支持 反对

使用道具 举报

发表于 2013-7-17 23:20:43 | 显示全部楼层
终于看到具体使用代码,了解了。我讨厌以前看到的铺天盖地的翻番介绍,让我不知arduino和MCU套件有啥区别,这种个人的、具体的好!
回复 支持 反对

使用道具 举报

发表于 2014-7-23 14:11:55 | 显示全部楼层
求模拟鼠标的
回复 支持 反对

使用道具 举报

发表于 2014-8-27 16:37:44 | 显示全部楼层
拿来学习一下
回复 支持 反对

使用道具 举报

发表于 2014-11-29 13:42:44 | 显示全部楼层
楼主,按照你的做法尝试了。的确可以实现,感激不尽。 但是在下载固件的时候没有保存原来的固件,无法还原了。。请求楼主把原固件贴出来。。小白在网上没找到。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-18 15:07:08 | 显示全部楼层
GW.wangshuo 发表于 2014-11-29 13:42
楼主,按照你的做法尝试了。的确可以实现,感激不尽。 但是在下载固件的时候没有保存原来的固件,无法还原了 ...

arduino编译器文件夹下面有原固件
回复 支持 反对

使用道具 举报

发表于 2015-6-15 22:00:27 | 显示全部楼层
当你按键NumLock三次的时候,它会模拟按键输入一排信息

请教这个NumLock是指开发板上的NumLock还是物理键盘的NumLock?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-19 08:44:51 | 显示全部楼层
zzzazzz 发表于 2015-6-15 22:00
当你按键NumLock三次的时候,它会模拟按键输入一排信息

请教这个NumLock是指开发板上的NumLock还是物理键 ...

这个例子是物理键盘的NumLock,但实际使用你可以用开发板的IO模拟物理键盘,看代码
回复 支持 反对

使用道具 举报

发表于 2017-6-10 12:34:12 | 显示全部楼层
给的库里有好多个文件夹,具体是哪个呢?另外为啥我导入库的时候#include 了好几个进去
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-25 00:34 , Processed in 0.049310 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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