在这个项目中,我们将使用与游戏手柄或游戏控制器相同的操纵杆来玩任何需要左右移动的电脑游戏。要玩需要更多控制选项的游戏,可以使用两个或更多操纵杆。在这里,我们将使用 Arduino Leonardo 将操纵杆作为游戏控制器进行接口。Arduino Leonardo 比 Uno 的优势在于我们可以在其上安装 USB 驱动程序,并且在连接时可以被计算机检测为鼠标、键盘或操纵杆。
所需组件
阿杜诺·莱昂纳多
双轴XY操纵杆模块
Arduino IDE
连接线
阿杜诺·莱昂纳多
对于这个项目,我们使用的是 Arduino Leonardo,它是一个基于 ATmega32u4 的微控制器板。它有 20 个数字输入/输出引脚(其中 7 个可用作 PWM 输出,12 个用作模拟输入)、一个 16 MHz 晶体振荡器、一个微型 USB 连接、一个电源插孔、一个 ICSP 接头和一个复位按钮。它包含支持微控制器所需的一切;只需使用 USB 电缆将其连接到计算机或使用 AC-DC 适配器或电池为其供电即可开始使用。
Leonardo 与之前所有开发板的不同之处在于 ATmega32u4 具有内置 USB 通信功能,无需辅助处理器。除了虚拟 (CDC) 串行/COM 端口外,这允许 Leonardo 在连接的计算机上显示为鼠标和键盘。
技术规格
引脚输出参考
双轴XY操纵杆模块
操纵杆 有不同的形状和尺寸。典型的 操纵杆模块 如下图所示。此操纵杆模块通常提供模拟输出,并且此模块提供的输出电压会根据我们移动它的方向不断变化。我们可以通过使用一些微控制器解释这些电压变化来获得运动方向。
如您所见,此操纵杆模块有两个轴。它们是 X 轴和 Y 轴。JOY STICK 的每个轴都安装在电位器或电位器上。这些电位器的中点被驱动为 Rx 和 Ry。所以 Rx 和 Ry 是这些底池的可变点。当操纵杆处于待机状态时,Rx 和 Ry 充当分压器。
当操纵杆沿水平轴移动时,Rx 引脚上的电压会发生变化。类似地,当它沿垂直轴移动时,Ry 引脚上的电压会发生变化。所以 我们在两个 ADC 输出上有四个方向的操纵杆。当摇杆移动时,每个引脚上的电压会根据方向变高或变低。
电路原理图
此Arduino 操纵杆游戏控制器需要 Arduino 和操纵杆之间的连接,如下所示:
代码和工作说明
最后给出完整的代码和演示视频;在这里,我们解释它的几个重要部分。
首先,我们需要初始化键盘库
#include《键盘.h》
接下来在下面的代码中,我们分别为模拟引脚 A0 和 A1 初始化了操纵杆模块的 X 和 Y 轴。
const int X_pin 和 const int Y_pin 分别
读取 VRX 引脚的模拟值,如果值为 1023,则给出“向上”命令,如果值为 0,则给出“向下”命令。
类似地,读取 VRY 引脚的模拟值,如果值为 1023,则给出“右”命令,如果值为 0,则给出“左”命令。
操纵杆顶部还有一个按钮,因此该按钮 (SW) 也会被读取,如果按下按钮,则值将为 0,然后给出“输入”命令。
最后将代码烧录到 Arduino 中,并将 Arduino 与计算机连接。
接下来检查控制面板中的“设备和打印机”,您将能够在设备部分下看到“ Arduino Leonardo”,如下图所示。现在您可以开始使用操纵杆了。
我们可以使用此操纵杆控制任何游戏控件。摇杆内部有两个电位器,一个用于 X 轴移动,另一个用于 Y 轴移动。每个电位器从 Arduino 获得 5v。所以当我们移动操纵杆时,电压值会改变,模拟引脚 A0 和 A1 的模拟值也会改变。所以操纵杆将充当游戏手柄。
因此,这就是使用 Arduino Leonardo 将普通操纵杆转换为游戏控制器的方式,并可用于玩具有向左、向右、向上和向下移动的所有控件的游戏。如前所述,除了这四个基本功能之外,可以连接多个操纵杆以获得更多控制。
#include<键盘.h>
常量 int SW_pin = 2; // 数字引脚连接到开关输出
const int X_pin = A0; // 模拟引脚连接到 X 输出
const int Y_pin = A1; // 模拟引脚连接到 Y 输出
int x, y;
无效设置()
{
pinMode(SW_pin,输入);// SW 引脚设置为输入
digitalWrite(SW_pin, HIGH); // 向 SW 引脚写入高值
Serial.begin(115200);
键盘.开始();
}
无效循环()
{
x = 模拟读取(X_pin);// 读取 X_pin 的输出
if (x == 1023) // 检查 x = 1023
{
Serial.println("Up:");
键盘.press(218); // 键向上移动
}
else
{
键盘.release(218); // 释放键
}
x = analogRead(X_pin); // 读取 X_pin 的输出
if (x == 0) // 检查 x 的值是否 = 0
{
Serial.println("向下:");
键盘.press(217); // 键向下移动
}
else
{
Keyboard.release(217); // 释放键
}
y = analogRead(Y_pin); // 读取 Y_pin 的输出
if (y == 1023) // 检查 y = 1023
{
Serial.println("Right:");
键盘.press(216); // 键向右移动
}
else
{
Keyboard.release(216); // 释放键
}
y = analogRead(Y_pin); // 读取 Y_pin 的输出
if (y == 0) // 检查 y = 0
{
Serial.println("Left:");
键盘.press(215); // 键向左移动
}
else
{
键盘.release(215); // 释放密钥
}
int z = digitalRead(SW_pin); // 读取 SW pin 的值
if (z == 0) // 检查 z 的值是否 = 0
{
Serial.println("Enter:");
键盘.println(); //按下回车键
}
delay(500);
}
这里还没有内容,您有什么问题吗?
电子电路资源推荐
- SOT封装.PcbLib
来源:下载中心
- 51单片机应用系统开发实例精解(C语言).pdf
来源:下载中心
- simulink仿真教学视频
来源:大学堂
- 电路理论基础
来源:大学堂
- 单片机运行原理的一点点总结
来源:电路图
- 电工基础:电路的组成
来源:电路图
推荐帖子 最新更新时间:2025-01-29 04:24
- 百问FB网络编程 - 网络编程简介
- ## **6.1** **网络编程简介** 要编写通过计算机网络通信的程序,首先要确定这些程序同通信的协议(protocol),在设计一个协议的细节之前,首先要分清程序是由哪个程序发起以及响应何时产生。 举例来说,一般认为WEB服务器程序是一个长时
- aleksib国产芯片交流
- FRED案例展示:随机化自由曲面建模
- 附件中的文件展示了一种使用FRED的双立方网格(Bicubic Mesh)表面来创建具有随机轮廓的表面的简单方法。双立方网格表面表示在X和Y位置上的Z表面凹陷(sag),这些是由在X和Y上矩形网格中提供的表格数据决定的。这种表面类型提供了一种生成自由曲面的简便方式。
- W-Winnie测试/测量
- MOS管在医用控温毯控制系统驱动电路设计中的VBE1606\VBN1603
- 一、医用控温毯的实用意义 在临床环境下,物理升降温的治疗方法非常常见。物理降温可用于亚低温治疗法,脑组织受损的患者可依赖亚低温治疗(28~35℃)使脑部在血氧不足的情况下有更高的耐受度;物理升温可用于手术或康复治疗,防止术后并发症或全身麻醉时间过长而出现的体温过低
- VBsemi模拟与混合信号
- 瑞芯微RK3566/RK3568开发板安卓11固件ROOT教程,Purple Pi OH演示
- 本文介绍RK3566/RK3568开发板Android11系统,编译ROOT权限固件的方法。触觉智能Purple Pi OH鸿蒙开发板演示,搭载了瑞芯微RK3566四核处理器,Laval鸿蒙社区推荐开发板,已适配全新OpenHarmony5.0 Release系统,SDK源码全
- Industio_触觉智能Linux与安卓
- 国内首创 | 扁线技术赋能自动化驱动电机
- 在科技的浪潮中,每一次创新都是对未来的探索。 磁驱输送技术相较于传统的链条及皮带等输送方式,其创新之处在于利用线圈电机产生的磁场进行磁力传动,实现输送线上的物料无接触高速传输,极大促进了生产流程的高效性、智能化以及柔性。 在磁驱输送
- 纵苇科技分立器件
- 当你有两台电脑,想用一套键鼠怎么切换?
- 1、使用KVM 切换器可以让你用一个键盘、鼠标和显示器来使用多台电脑。使用简单,即插即用,不需要安装额外的软件。将KVM切换器的视频、键盘和鼠标接口分别连接到两台电脑上,上面有按钮可以在两台电脑之间切换, 2、可以下载一个软件Synergy,可以在不同使用系统之间共享一套键盘和
- SAMZHE山泽测试/测量
- 天马Micro-LED产线顺利全制程贯通
- 紧急出售 - ST 芯片库存(芯片具体型号如下: BAT30F3 二极管 ESD25P35 - 1U1M 静电...
- 34mm SiC MOSFET半桥碳化硅模块产品介绍
- NTC温度传感器:护航新能源汽车电池安全运行
- 分享LM25116EN芯片几个疑难问题
- 求助:桥堆整流后的爬电距离要求
- MSP430 JTAG引脚图
- 为什么定时器不用打开EA和ET0也能正常开启定时?
- TI C5000编译器的错误信息列表
- 【Atmel SAM R21】超市手写标签毛胚功能货
- 关于ARM的中断服务程序
- 【转帖】如何用示波器测试有源晶振波形
- 简单说说无线充电技术
- 【NXP Rapid IoT评测】+手机同步器之六
- 【NXP Rapid IoT评测】+ 使用离线IDE构建显示传感器信息的应用
- 挑选电磁流量计应考虑的因素
- 使用SIMD并行处理多个数据的运算几个注意事项
- 反射以及如何在高速系统处理反射
- 2018秋招德州仪器可靠性工程师面试笔试经验
- 线路板的不同表面处理工艺保存时长
- MIC4604 的典型应用:具有高达 16V 可编程栅极驱动的 85V 半桥 MOSFET 驱动器
- 使用 Microchip Technology 的 TC2950 的参考设计
- #第六届立创电赛#离线语音夜灯
- DC1816B,具有 LT3799EMSE-1 离线隔离式反激式 LED 驱动器和 PFC、90-305VAC 输入至 36Vout (nom) @ 3A 的演示板
- 差分信号分析仪
- 【长安大学】滚筒测量装置-韩永麟
- 用于便携式的 12 位、1 通道 DAC
- LT3970EMS-5 2.5V 降压转换器的典型应用
- DM320018,基于 PIC32MX270F256D MCU 的 PIC32 蓝牙入门工具包
- 99物联底板