arduino变hid设备(键盘)

受委托做一个简单的按钮转键盘的模块。
需求很简单,8个按钮,分别模拟键盘的“W、A、S、D 、上、下、左、右”按键。

我手里只有两个uno ,网上查到的说leonardo(小李子?)才能支持直接模拟HID设备,uno不行。好吧,现买也来不及了。幸好网上还给出了uno的解决办法:
进入DFU模式,重新烧录 bootloader,让它模拟成一个HID设备,但在此之前需要先写入运行的程序,因为一旦烧录bootloader,就没法写入程序了(可以再把它烧录回来,但这样还是挺折腾的)

先程序:
要想用uno模拟键盘,IDE自带的keyboard库是不行的,编译不过。(只有当设备是小李子的时候才行),下载”USBKeyboard”库。直接导入即可。
上代码:

#include <USBKeyboard.h>

int val1, val2, val3, val4, val5, val6, val7, val8;

void setup() {
  // put your setup code here, to run once:
  Keyboard.init();
  for (int i = 2; i < 10; i++)
  {
    pinMode(i, INPUT_PULLUP);
  }
}

void loop() {
  // put your main code here, to run repeatedly:
  val1 = digitalRead(2);
  val2 = digitalRead(3);
  val3 = digitalRead(4);
  val4 = digitalRead(5);
  val5 = digitalRead(6);
  val6 = digitalRead(7);
  val7 = digitalRead(8);
  val8 = digitalRead(9);

  if (val1==0)
  {
//    Keyboard.print("w");
    Keyboard.sendKeyStroke(KEY_W, 0);
    delay(100);
  }
   if (val2==0)
  {
//    Keyboard.print("s");
    Keyboard.sendKeyStroke(KEY_S, 0);
    delay(100);
  }
   if (val3==0)
  {
//    Keyboard.print("a");
    Keyboard.sendKeyStroke(KEY_A, 0);
    delay(100);
  }
   if (val4==0)
  {
//    Keyboard.print("d");
    Keyboard.sendKeyStroke(KEY_D, 0);
    delay(100);
  }
   if (val5==0)
  {
     Keyboard.sendKeyStroke(KEY_UP_ARROW, 0);
    delay(100);
  }
   if (val6==0)
  {
     Keyboard.sendKeyStroke(KEY_DOWN_ARROW, 0);
    delay(100);
  }
   if (val7==0)
  {
     Keyboard.sendKeyStroke(KEY_LEFT_ARROW, 0);
    delay(100);
  }
   if (val8==0)
  {
     Keyboard.sendKeyStroke(KEY_RIGHT_ARROW, 0);
    delay(100);
  }
}

这段代码很简单,但有以个要点:INPUT_PULLUP 和 INPUT的区别:前者采用上拉输入,也就是默认状态针脚就带有5V电压,接地降为0。也就是采集的时候,1为断,0为通。而后者则是正常的输入采集,1为通,0为断(这么说也不准确,不过理解意思即可,类似NPN极性)
往往在实际运用中,未接负载的线路里,0V是很不稳定的,会有波动。如果没有负载的电路用INPUT采集的数据会不准确,所以尽量用INPUT_PULLUP。

代码完成,上传到uno,暂时是没法测试的。只能写的时候仔细点了。

下一步就该烧录bootloader了。根据具体的设备型号,方法可能不同,我运气好,直接一次过了。
需要下载清单:
1、Flip 3.4.7(用于写入bootloader)
2、Arduino-keyboard-0.3.hex 顺道连 Arduino-usbserial-uno.hex也一起下载了。前者是用于将uno变成HID设备的。后者则是变回来的。

操作步骤:
1、将上传完程序的uno断开,重新连接到PC。
2、用导线(跳线帽)等,将靠近USB口的两个针脚短接(搭一下即可)进入DFU 模式 。注意:网上看到有人说买了山寨版的uno,无法进入DFU模式。这点没有验证,我的uno还好是正品,能正常进入。
3、进入DFU后,在设备管理器中uno就变成了未知设备了。然后通过更新驱动,进入到Flip的安装目录:C:\Program Files (x86)\ATMEL\Flip 3.4.7\usb 让它自动搜索驱动。我犯了个低级错误,下载flip的时候,选择了个2.4版的,然后死活找不到驱动,后来重新下载新的(3.47)才顺利安装。
4、接下来,打开flip软件,导入hex文件(Arduino-keyboard-0.3.hex ),erase, blank check, program, verify按顺序点一遍。然后只要不报错,就OK了。
5、断开uno,重新连接,然后uno就变成HID KEYBOARD了。

如果要修改程序,将上面步骤重新来一遍,只不过把hex文件替换成Arduino-usbserial-uno.hex。重新连接后uno又恢复了,继续修改,再重来。
收工。这一次就要送出去两个uno,好在找委托人敲诈了10片uno回来,哈哈哈哈

感谢网络上各位大拿提供的宝贵经验,希望本文能帮到你。
本文需要下载的东东:
链接:http://pan.baidu.com/s/1o7KkrCe 密码:1yd5

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容