将电键变为鼠标和键盘 —— 实现篇

还记得上一篇文章介绍的使用 Teensy 3.2 将摩尔斯电键变为键盘的方法么?经过研究,笔者决定使用 Arduino Leonardo 实现之。相比 Teensy 3.2,Arduino Leonardo 价格更低(因为在国内更流行),并且实现起来也较为简单。电键则采用全新产品,无需手动走线、打磨底座等,避免了使用二战时期古董带来的种种问题。

Arduino Leonardo 是基于 ATmega32U4 微控制器的开发板。它有 20 个输入 / 输出引脚(在写入程序时可以定义各个引脚的作用,其中最多有 7 个可用于 PWM 输出、12 个可用于模拟输入),一个 16 MHz 的晶体振荡器,一个 Micro USB 接口,一个 DC 接口,一个 ICSP 接口,一个复位按钮。
Leonardo 不同于之前所有的 Arduino 开发板,它没有单独的 USB 转 UART 芯片,而是直接使用 ATmega32U4 的 USB 通信功能。这使得 Leonardo 不仅可以通过串口与计算机通信,还可以模拟成 USB 鼠标或者键盘 —— 这也正是笔者选择它的原因。更多内容可以参考 Arduino Leonardo 介绍文档,在 DOCUMENTATION 选单中还包含完整电路图。

硬件准备工作

需要准备

  • Arduino Leonardo 开发板 1 一块
  • 摩尔斯电键一个(例如 K4 型重型电键)
  • 面包板、导线(杜邦头连接线)及 USB 线

取决于摩尔斯电键的输出方式,可能还需要一个 3.5mm/6.5mm 音频转接口

软件准备工作

理论上 Arduino Leonardo 可以无需驱动,即插即用;如果出现系统无法识别设备(串口)的情况,可以试试重启 Arduino Leonardo、换一根 USB 线、下载安装相关驱动。

操作步骤

  • 打开 Arduino IDE,安装 Bounce2 库(可以下载后导入,或在「管理库……」选单中搜索 Bounce2 来安装)。

  • 将 Arduino Leonardo 开发板通过 USB 线连接到电脑上,在 Arduino IDE 的「工具」菜单下设置正确的开发板和端口,如图所示。


  • 如果是初次使用,在「文件」菜单下选择示例,找到 Blink,打开后,依次点击编译、上传。如果出现未响应、无法找到端口等现象,请按下开发板上的复位按钮。如果上传成功,并且二极管 L 以 0.5Hz 的频率闪烁,则说明配置正确。

  • 下载程序的的源代码文件。使用 Arduino IDE 打开 getMorseInput,然后依次点击编译、上传。该程序能够将摩尔斯电键变为虚拟键盘。
  • 接下来使用物理方法将摩尔斯电键的两端分别连到 Arduino Leonardo 的 GND 和 7 端口。当然,你可以更改源代码来使用别的端口,下图笔者测试的时候就改成了 12 端口。

  • 如果一切就绪,那么,当你按下电键,输入摩尔斯电码后,Arduino Leonardo 就会像 USB 键盘一样向电脑发出信号,打出对应的字符。

  • Arduino Leonardo 也可以模拟成鼠标,程序如下所示。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <Mouse.h>

void setup() {
// put your setup code here, to run once:
pinMode(LED_BUILTIN, OUTPUT);
pinMode(7, INPUT_PULLUP);
Mouse.begin();
digitalWrite(LED_BUILTIN, LOW);
}

void loop() {
// put your main code here, to run repeatedly:
if (digitalRead(7) == LOW) {
if (!Mouse.isPressed(MOUSE_LEFT)) {
Mouse.press(MOUSE_LEFT);
digitalWrite(LED_BUILTIN, HIGH);
delay(20);
}
}
else {
if (Mouse.isPressed(MOUSE_LEFT)) {
Mouse.release(MOUSE_LEFT);
digitalWrite(LED_BUILTIN, LOW);
}
}
}

烧录这个程序后,就能够将摩尔斯电键变为虚拟鼠标,按下电键即触发一次鼠标点击。

以上就是用摩尔斯电键作鼠标和键盘的教程。当然,Arduino Leonardo 开发板的作用远远不止这些,如果发现更为有趣的应用,笔者会继续分享出来。


macOS 10.15 Catalina 存在驱动问题,无法向 Arduino Leonardo 烧录程序,需要升级系统来解决。在 Windows 10 上,如果遇到缺少 USB 芯片驱动的问题,可以通过 Windows 更新中的驱动程序更新来解决。