受委托做一个简单的按钮转键盘的模块。
需求很简单,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