我们先前将操纵杆与Arduino UNO进行了接口,以了解其工作原理并控制其左右,左右移动中的四个LED。在此项目中,我们将使用与Gamepad或游戏控制器相同的操纵杆来玩任何需要左右,上下移动的计算机游戏。要玩需要更多控制选项的游戏,可以使用两个或多个操纵杆。在这里,我们将使用Arduino Leonardo将游戏杆作为游戏控制器。与Uno相比,Arduino Leonardo具有一个优势,我们可以在其上安装USB驱动程序,并且在连接时可以被计算机检测为鼠标,键盘或操纵杆。
所需组件
- Arduino的莱昂纳多
- 双轴XY游戏杆模块
- Arduino IDE
- 连接线
Arduino的莱昂纳多
对于这个项目,我们使用的是Arduino Leonardo,它是基于ATmega32u4的微控制器板。它具有20个数字输入/输出引脚(其中7个可用作PWM输出,12个用作模拟输入),一个16 MHz晶体振荡器,一个微型USB连接,一个电源插孔,一个ICSP接头和一个复位按钮。它包含支持微控制器所需的一切;只需使用USB电缆将其连接到计算机,或使用AC-DC适配器或电池为其供电即可开始使用。
Leonardo与所有以前的板卡的不同之处在于ATmega32u4具有内置的USB通信功能,从而无需使用辅助处理器。除了虚拟(CDC)串行/ COM端口之外,这还使Leonardo可以像鼠标和键盘一样在连接的计算机上显示。
技术指标
微控制器 | ATmega32u4 |
工作电压 | 5伏 |
输入电压(推荐) | 7-12V |
输入电压(极限) | 6-20V |
数字I / O引脚 | 20 |
PWM通道 | 7 |
模拟输入通道 | 12 |
每个I / O引脚的直流电流 | 40毫安 |
3.3V引脚的直流电流 | 50毫安 |
快闪记忆体 | 32 KB(ATmega32u4),其中4 KB由引导加载程序使用 |
SRAM | 2.5 KB(ATmega32u4) |
EEPROM | 1 KB(ATmega32u4) |
时钟速度 | 16兆赫 |
长度 | 68.6毫米 |
宽度 | 53.3毫米 |
重量 | 20克 |
PIN输出参考
双轴XY游戏杆模块
操纵杆 有不同的形状和尺寸。 下图显示了一个典型的 操纵杆模块。该操纵杆模块通常提供模拟输出,并且该模块提供的输出电压会根据我们移动它的方向不断变化。通过使用一些微控制器解释这些电压变化,我们可以获得运动的方向。以前,我们将操纵杆与不同的微控制器接口:
- 将操纵杆与Arduino接口
- 将游戏杆与Raspberry Pi连接
- 将操纵杆与PIC单片机接口
- 游戏杆与AVR微控制器的接口
如您所见,此操纵杆模块有两个轴。它们是X轴和Y轴。JOY STICK的每个轴均安装在电位计或电位计上。这些底池的中点被淘汰为Rx和Ry。因此,Rx和Ry是这些电位器的可变点。当操纵杆处于待机状态时,Rx和Ry充当分压器。
当操纵杆沿水平轴移动时,Rx引脚上的电压会发生变化。同样,当它沿垂直轴移动时,Ry引脚上的电压也会发生变化。因此 ,在两个ADC输出上有四个操纵杆方向。当摇杆移动时,每个插针上的电压会根据方向变高或变低。
电路原理图
此Arduino游戏杆游戏控制器要求Arduino和游戏杆之间的连接如下:
代码和工作说明
最后给出了带有演示视频的完整代码;在这里,我们正在解释它的几个重要部分。
首先,我们需要初始化键盘库
#包括
在下面的代码中,我们分别为模拟引脚A0和A1初始化了操纵杆模块的X和Y轴。
const int X_pin和const int Y_pin
读取VRX引脚的模拟值,如果该值为1023,则给出“ up”命令,如果该值为0,则给出“ down”命令。
同样,读取VRY引脚的模拟值,如果值为1023,则给出“ right”的命令,如果值为0,则给出“ left”的命令。
操纵杆顶部还有一个按钮,因此该按钮(SW)也会被读取,如果按下该按钮,该值将为0,然后给出“ enter”命令。
最后将代码烧入Arduino,并将Arduino与计算机连接。
接下来,检查控制面板中的“ 设备和打印机” ,您将能够在设备部分下看到“ Arduino Leonardo”,如下图所示。现在,您可以使用操纵杆了。
我们可以使用此操纵杆控制任何游戏控件。操纵杆内部有两个电位计,一个用于X轴移动,另一个用于Y轴移动。每个电位器从Arduino获得5v电压。因此,当我们移动操纵杆时,电压值将改变,并且模拟引脚A0和A1的模拟值也将改变。因此,操纵杆将充当游戏手柄。
因此,这就是使用Arduino Leonardo将普通游戏杆转换为游戏控制器的方式,并且可以用于玩具有使所有控件向左,向右,向上和向下移动的游戏。如前所述,可以连接一个以上的操纵杆以获取除这四个基本功能以外的更多控件。