Arduino - 键盘消息
Arduino - 模拟键盘 (HID)
Section titled “Arduino - 模拟键盘 (HID)”某些 Arduino 开发板可以作为人机接口设备 (HID, Human Interface Device),例如键盘或鼠标。这使得你的 Arduino 能够向连接的计算机发送按键指令。此功能适用于具有原生 USB 功能的开发板,例如 Leonardo、Micro、Due、Zero、MKR 系列和 UNO R4。
在本教程中,我们将让按钮按下时向计算机发送一条消息,并计数它已被按下了多少次。编程完成后,只需打开任何文本编辑器即可查看输出。
警告: 当你使用 Keyboard 库时,Arduino 将控制你的计算机键盘。为避免失去控制,请始终在电路中包含一个物理控制(如按钮)来触发键盘命令,如本示例所示。
方法 1:使用外部电阻
Section titled “方法 1:使用外部电阻”- 1 × 面包板
- 1 × Arduino Leonardo、Micro 或其他兼容 HID 的开发板
- 1 × 瞬时按钮 (Momentary Pushbutton)
- 1 × 10kΩ 电阻(下拉电阻,pull-down)
- 将按钮的一条腿连接到 Arduino 的 5V 引脚。
- 将另一条腿连接到数字输入引脚(例如,引脚 4)。
- 将 10kΩ 电阻从同一条腿(引脚 4)连接到 GND。这是一个下拉电阻,确保按钮未按下时引脚读取为 LOW。
方法 2:使用 INPUT_PULLUP 的现代方法
Section titled “方法 2:使用 INPUT_PULLUP 的现代方法”- 1 × 面包板
- 1 × Arduino Leonardo、Micro 或其他兼容 HID 的开发板
- 1 × 瞬时按钮
- 将按钮的一条腿连接到数字输入引脚(例如,引脚 4)。
- 将另一条腿连接到 Arduino 的 GND 引脚。
这种方法更简单、更可靠。它利用了微控制器内部的上拉电阻 (pull-up resistor),无需外部电阻。这是推荐的方法。
Arduino 代码(适用于使用 INPUT_PULLUP 的方法 2)
Section titled “Arduino 代码(适用于使用 INPUT_PULLUP 的方法 2)”此代码使用更简单的 INPUT_PULLUP 电路,并包含去抖动 (debouncing) 功能,以防止单次按下被多次注册。
/* 键盘消息发送器 适用于兼容 HID 的 Arduino 开发板。 使用推荐的 INPUT_PULLUP 方法与去抖动功能。*/
#include "Keyboard.h"
// 引脚和设置常量const int BUTTON_PIN = 4; // 连接到按钮的引脚const long DEBOUNCE_DELAY = 50; // 去抖动时间(毫秒)
// 用于跟踪按钮状态和时间的变量int buttonState = 0; // 输入引脚的当前读数int lastButtonState = HIGH; // 输入引脚的先前读数unsigned long lastDebounceTime = 0; // 上次输出引脚切换的时间int pressCounter = 0; // 按钮按下计数器
void setup() { // 将按钮引脚设置为带内部上拉电阻的输入模式。 // 当按钮未按下时,引脚将为 HIGH;按下时,引脚将为 LOW。 pinMode(BUTTON_PIN, INPUT_PULLUP);
// 初始化键盘控制 Keyboard.begin();}
void loop() { // 将开关状态读取到局部变量中: int reading = digitalRead(BUTTON_PIN);
// 检查按钮状态是否已改变(从 HIGH 到 LOW 或从 LOW 到 HIGH) if (reading != lastButtonState) { // 重置去抖动计时器 lastDebounceTime = millis(); }
// 如果按钮状态稳定超过去抖动延迟时间, // 则确认为有效状态变化。 if ((millis() - lastDebounceTime) > DEBOUNCE_DELAY) { // 如果状态已改变,且是有效的按下事件 if (reading != buttonState) { buttonState = reading;
// 我们只希望在按钮按下时(变为 LOW)才进行打字 if (buttonState == LOW) { pressCounter++; Keyboard.print("按钮已按下 "); Keyboard.print(pressCounter); Keyboard.println(" 次。"); } } }
// 保存当前读数以供下一次循环迭代 lastButtonState = reading;}#include "Keyboard.h":此行包含了 Arduino 键盘库,其中包含了模拟键盘所需的所有函数。pinMode(BUTTON_PIN, INPUT_PULLUP):这会将引脚配置为输入模式,并连接一个内部电阻到 5V。这意味着引脚默认读取HIGH,只有当按钮按下时(连接到 GND 时)才读取LOW。millis()-基于的去抖动:代码会检查按钮的状态是否在DEBOUNCE_DELAY毫秒内保持稳定,然后才将其注册为有效按下。这是一种处理机械开关嘈杂电信号的稳健方法。Keyboard.print():此函数向连接的计算机发送按键指令,就像你在真实键盘上打字一样。
对开发板编程后,拔下 USB 线。在你的电脑上打开一个文本编辑器,并将光标放置在输入区域。重新插上 Arduino。现在,每次你按下按钮时,你的编辑器中都应出现一行新文本,报告更新后的按下计数。