在這個項目中,我們將使用與游戲手柄或游戲控制器相同的操縱桿來玩任何需要左右移動的電腦游戲。要玩需要更多控制選項的游戲,可以使用兩個或更多操縱桿。在這里,我們將使用 Arduino Leonardo 將操縱桿作為游戲控制器進行接口。Arduino Leonardo 比 Uno 的優(yōu)勢在于我們可以在其上安裝 USB 驅(qū)動程序,并且在連接時可以被計算機檢測為鼠標(biāo)、鍵盤或操縱桿。
所需組件
阿杜諾·萊昂納多
雙軸XY操縱桿模塊
Arduino IDE
連接線
阿杜諾·萊昂納多
對于這個項目,我們使用的是 Arduino Leonardo,它是一個基于 ATmega32u4 的微控制器板。它有 20 個數(shù)字輸入/輸出引腳(其中 7 個可用作 PWM 輸出,12 個用作模擬輸入)、一個 16 MHz 晶體振蕩器、一個微型 USB 連接、一個電源插孔、一個 ICSP 接頭和一個復(fù)位按鈕。它包含支持微控制器所需的一切;只需使用 USB 電纜將其連接到計算機或使用 AC-DC 適配器或電池為其供電即可開始使用。
Leonardo 與之前所有開發(fā)板的不同之處在于 ATmega32u4 具有內(nèi)置 USB 通信功能,無需輔助處理器。除了虛擬 (CDC) 串行/COM 端口外,這允許 Leonardo 在連接的計算機上顯示為鼠標(biāo)和鍵盤。
技術(shù)規(guī)格
引腳輸出參考
雙軸XY操縱桿模塊
操縱桿 有不同的形狀和尺寸。典型的 操縱桿模塊 如下圖所示。此操縱桿模塊通常提供模擬輸出,并且此模塊提供的輸出電壓會根據(jù)我們移動它的方向不斷變化。我們可以通過使用一些微控制器解釋這些電壓變化來獲得運動方向。
如您所見,此操縱桿模塊有兩個軸。它們是 X 軸和 Y 軸。JOY STICK 的每個軸都安裝在電位器或電位器上。這些電位器的中點被驅(qū)動為 Rx 和 Ry。所以 Rx 和 Ry 是這些底池的可變點。當(dāng)操縱桿處于待機狀態(tài)時,Rx 和 Ry 充當(dāng)分壓器。
當(dāng)操縱桿沿水平軸移動時,Rx 引腳上的電壓會發(fā)生變化。類似地,當(dāng)它沿垂直軸移動時,Ry 引腳上的電壓會發(fā)生變化。所以 我們在兩個 ADC 輸出上有四個方向的操縱桿。當(dāng)搖桿移動時,每個引腳上的電壓會根據(jù)方向變高或變低。
電路原理圖
此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 與計算機連接。
接下來檢查控制面板中的“設(shè)備和打印機”,您將能夠在設(shè)備部分下看到“ Arduino Leonardo”,如下圖所示?,F(xiàn)在您可以開始使用操縱桿了。
我們可以使用此操縱桿控制任何游戲控件。搖桿內(nèi)部有兩個電位器,一個用于 X 軸移動,另一個用于 Y 軸移動。每個電位器從 Arduino 獲得 5v。所以當(dāng)我們移動操縱桿時,電壓值會改變,模擬引腳 A0 和 A1 的模擬值也會改變。所以操縱桿將充當(dāng)游戲手柄。
因此,這就是使用 Arduino Leonardo 將普通操縱桿轉(zhuǎn)換為游戲控制器的方式,并可用于玩具有向左、向右、向上和向下移動的所有控件的游戲。如前所述,除了這四個基本功能之外,可以連接多個操縱桿以獲得更多控制。
#include<鍵盤.h>
常量 int SW_pin = 2; // 數(shù)字引腳連接到開關(guān)輸出
const int X_pin = A0; // 模擬引腳連接到 X 輸出
const int Y_pin = A1; // 模擬引腳連接到 Y 輸出
int x, y;
無效設(shè)置()
{
pinMode(SW_pin,輸入);// SW 引腳設(shè)置為輸入
digitalWrite(SW_pin, HIGH); // 向 SW 引腳寫入高值
Serial.begin(115200);
鍵盤.開始();
}
無效循環(huán)()
{
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);
}
-
Arduino
+關(guān)注
關(guān)注
188文章
6469瀏覽量
187109 -
操縱桿
+關(guān)注
關(guān)注
0文章
69瀏覽量
8545 -
游戲控制器
+關(guān)注
關(guān)注
0文章
15瀏覽量
3013
發(fā)布評論請先 登錄
相關(guān)推薦
評論