Arduino Leonardo 作为游戏手柄

Posted

技术标签:

【中文标题】Arduino Leonardo 作为游戏手柄【英文标题】:Arduino Leonardo as gamepad 【发布时间】:2019-07-13 14:03:57 【问题描述】:

我正在尝试使用 arduino leonardo 构建一个新的游戏手柄,以将击键发送到 pc。

我只能让我的游戏手柄像键盘一样工作。

在我构建了我的游戏手柄并尝试在 PC 游戏中使用它之后,我按下了一个按钮,它可以向 PC 发送诸如“q”、“w”、“e”、“r”等击键。

如何发送“按钮 1”、“按钮 2”、“按钮 3”等按键?

【问题讨论】:

我不确定你如何将它连接到 PC,但如果你将它作为隐藏设备连接,它只会像真正的键盘一样工作。如果你想像 Gamepad 一样模拟它,你需要把它变成一个隐藏的游戏手柄。 【参考方案1】:

HID 设备通过提供称为 HID 报告描述符的结构来指定应如何解释其数据。似乎您的应用程序正在使用旨在模拟键盘而不是游戏手柄的报告描述符,这就是您看到击键而不是游戏手柄按钮输入的原因。您可以在Device Class Definition for HID v1.11 中找到有关 HID 报告描述符的更多信息。

HID 规范定义了称为“用途”的数值,表示设备的预期用途。这些使用被划分为代表广泛使用类别的“使用页面”。例如,键盘将具有通用桌面使用页面中的键盘使用情况。设备支持的单个输入和输出也有用途,例如 Tab 键在键盘/键盘使用页面上有自己的用途。

HID 游戏手柄的报告描述符应具有***应用程序集合,其中包含 GenericDesktop/Joystick 使用情况(UP:0x01,U:0x04)或 GenericDesktop/GamePad 使用情况(UP:0x01,U:0x05)。

游戏手柄按钮应该具有来自按钮使用页面的用法,从主按钮的用法 1 开始(UP:0x09,U:0x01)。游戏手柄轴应具有 GenericDesktop 页面中轴范围的用法,通常左摇杆具有 X 和 Y 轴用法(X 向上:0x01,U:0x30,Y 向上:0x01,U:0x31)。如果你有一个方向键,它应该有 Hat Switch 轴的使用情况(UP:0x01,U:0x39)并且应该将它的值报告为一个旋转。

有关 HID 使用值的更多信息,请参阅HID Usage Tables v1.12 文档。

Here's an example report descriptor 用于简单的类似游戏手柄的设备,具有 12 个按钮、2 个拇指摇杆、2 个模拟触发器和一个方向键。

【讨论】:

以上是关于Arduino Leonardo 作为游戏手柄的主要内容,如果未能解决你的问题,请参考以下文章

Arduino 操纵杆到网络游戏手柄

如何将 Xinput 添加到游戏手柄 arduino 项目?

树莓派与Arduino Leonardo使用NRF24L01无线模块通信之基于RF24库发送自定义数据

arduino leonardo 和arduino uni有啥区别吗?

初学arduino应该买leonardo还是uno?请说明为啥。

arduino leonardo r3 和 arduino uno r3 有啥区别