自制游戏手柄--Android画面的input输入控制

devtools/2024/9/23 6:27:44/

在使用传感器获取到运动数据后,怎样转换为input事件传给手机呢,这里以Android为例,

我们可以考虑以下方式:

1. 物理方式,使用舵机连接触碰笔去实现,

2. 构造MotionEvent事件,注入input,类似adb shell input命令,可以参考input命令的代码

3. Android手机可以连接鼠标使用,可以使用支持虚拟鼠标功能的Arduino连接手机,发送相应的touch事件

4. Android手机通过scrcpy投屏到电脑,通过Arduino控制电脑上的鼠标

要使用Arduino来控制电脑的鼠标,你可以使用Arduino作为USB HID(Human Interface Device)设备来发送鼠标事件。Arduino可以通过USB与电脑通信,并模仿鼠标的行为,如移动、点击等。

下面我将详细介绍如何实现这一功能。

所需材料:

  1. Arduino 开发板(例如 Arduino Leonardo 或 Micro,因为它们支持USB HID)
  2. USB 数据线
  3. 电脑

准备工作:

确保你的Arduino开发板支持USB HID功能。Arduino Leonardo、Micro、Nano 33 BLE等开发板都支持USB HID。如果你使用的是其他类型的Arduino开发板(如Uno),则需要额外的库来实现HID功能。

示例代码:

下面是一个简单的Arduino代码示例,用于模拟鼠标移动和点击操作。

1#include <Mouse.h> // 包含 Mouse 库
2
3void setup() {
4  // 初始化串口通信,用于调试
5  Serial.begin(9600);
6}
7
8void loop() {
9  // 在setup()中初始化串口后,可以在这里打印信息
10  Serial.println("Moving mouse and clicking");
11
12  // 移动鼠标
13  Mouse.move(100, 0, 0); // 向右移动100个单位
14  delay(1000); // 延迟1秒
15
16  // 左键点击
17  Mouse.press(MOUSE_LEFT_BUTTON); // 按下左键
18  delay(100); // 模拟短暂的点击
19  Mouse.release(MOUSE_LEFT_BUTTON); // 释放左键
20  delay(1000); // 延迟1秒
21
22  // 移动鼠标
23  Mouse.move(-100, 0, 0); // 向左移动100个单位
24  delay(1000); // 延迟1秒
25}

说明:

  1. 包含库

    • #include <Mouse.h>:包含用于控制鼠标的库。这个库是Arduino Leonardo等支持USB HID的开发板自带的。
  2. 初始化串口通信

    • Serial.begin(9600);:初始化串口通信,用于调试。
  3. 鼠标移动

    • Mouse.move(x, y, wheel);:模拟鼠标移动。参数xy分别表示水平和垂直方向的移动距离,单位为鼠标步进单位(通常为1)。参数wheel表示滚轮的移动量,可以省略。
  4. 鼠标点击

    • Mouse.press(button);:模拟按下鼠标按钮。button参数可以是MOUSE_LEFT_BUTTONMOUSE_RIGHT_BUTTONMOUSE_MIDDLE_BUTTON
    • Mouse.release(button);:模拟释放鼠标按钮。

编程步骤:

  1. 打开Arduino IDE。
  2. 创建一个新的草图。
  3. 将上述代码复制到编辑器中。
  4. 连接Arduino开发板到电脑。
  5. 在IDE中选择正确的开发板型号和串口。
  6. 点击上传按钮将代码上传到Arduino开发板。

注意事项:

  • 开发板选择:确保你选择了支持USB HID功能的开发板,如Arduino Leonardo或Micro。
  • 库支持:如果你使用的不是Arduino Leonardo或Micro,可能需要安装额外的库来支持USB HID功能。例如,对于Arduino Uno,可以使用hiduino库来实现HID功能。
  • 兼容性:确保你的电脑操作系统支持Arduino作为USB HID设备。大多数现代操作系统(如Windows、macOS和Linux)都支持这一点。
  • 鼠标事件Mouse.move函数中的参数表示鼠标移动的距离,单位为鼠标步进单位,而不是像素。因此,移动100个单位并不一定意味着鼠标在屏幕上移动100像素。
  • 调试:通过串口监视器可以查看上传代码后的输出,这对于调试非常有用。


http://www.ppmy.cn/devtools/112010.html

相关文章

RAG与LLM原理及实践(17)---Docker Redis Python Usage

目录 背景 Redis 环境 download 修改镜像 Run Redis Coding python redis download 基本使用 描述 完整代码 运行结果 高阶用法 序列化的方式 Snapshot 与 AOF 快照(RDB) AOF(Append-Only File) 代码 总结 发布与订阅 描述 代码 运行结果 注…

19章 泛型

1.修改程序清单19-1中的GenericStack类&#xff0c;使用数组而不是ArrayList来实现它。你应该在给栈添加新元素之前检查数组的大小如果数组满了&#xff0c;就创建一个新数组。该数组是当前数组大小的两倍&#xff0c;然后将当前数组的元素复制到新数组中。 public class Gene…

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析&#xff1a; url中含有特殊字符 中文未编码 都有可能导致URL转换失败&#xff0c;所以需要对url编码处理 如下&#xff1a; guard let allowUrl webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时&a…

第十章 【后端】环境准备(10.7)——MySql

10.7 MySql 10.7.1 本地安装 下载 下载地址:https://www.mysql.com/downloads/ 安装 一路“下一步”即可。 10.7.2 Docker 安装࿰

选择排序

一&#xff1a;基本思想 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的数据元素排完 。 解释&#xff1a;就是不断的找到最小的放在最左面&#xff0c;然后缩短数组&#xff0c;…

argodb自定义函数读取hdfs文件的注意点,避免FileSystem已关闭异常

一、问题描述 一位同学反馈&#xff0c;他写的argo存过中调用了一个自定义函数&#xff0c;函数会加载hdfs上的一个文件&#xff0c;但有些节点会报FileSystem closed异常&#xff0c;同时有时任务会成功&#xff0c;有时会失败。 二、问题分析 argodb的计算引擎是基于spark…

[QT]记事本项目(信号槽,QT基础控件,QT文件操作,QT关键类,对话框,事件)

一.UI界面搭建 (ui界面使用&#xff0c;界面布局&#xff0c;各控件介绍&#xff0c;界面大小调整) 二.信号槽机制实现文件的打开&#xff0c;保存&#xff0c;退出 (信号槽&#xff0c;QFile文件类&#xff0c;QTextStream类&#xff0c;QFileDialog文件对话框&#xff0…

python运维

环境准备 安装python3环境 # centos 安装python3 yum install python3创建激活venv python3 -m venv .venv source .venv/bin/activatezookeeper pip install kazoo 递归复制目录 from kazoo.client import KazooClientdef copy_node(zk, source_path, destination_path)…