資料介紹
描述
大家好,我是 Sarvesh。幾天前,我想玩一些復古游戲。所以我把它們安裝在我的電腦上。但我只能用我的電腦鍵盤玩,這并沒有給我童年時代的感覺。所以我決定為我的 PC 構建一個可以玩舊游戲和新游戲(不是全部)的游戲手柄。我使用了一個舊的游戲控制器并對其進行了修改以創建這個很棒的游戲手柄。這是一款用于 PC 的有線游戲手柄。它可以用來玩模擬器和PC游戲。此外,操縱桿還可以用作 PC 的鼠標。游戲手柄使用 Arduino Pro Micro 進行控制。
第 1 步:電路圖和按鍵映射


根據上面給出的電路圖(第一個圖像)連接所有組件。
我建議首先檢查所有連接并在面包板上工作。
按鍵映射:
我實際按鈕放置的布局也顯示在上面(第二張圖片),讓您清楚地知道哪個按鈕位于何處,它使用什么標簽編程以及它向計算機發送什么字符。
第 2 步:Arduino 代碼
現在下載代碼并安裝 mouse.h 和 keyboard.h 庫。將代碼上傳到您的 Arduino。
您可以從下面復制代碼。
#include
#include
const int EMG = 2; //Emergency stop button :)
const int L1 = 7;
const int L2 = 8;
const int P1 = 9;
const int R1 = 14;
const int R2 = 16;
const int P2 = 10;
const int D1 = 4;
const int D2 = 5;
const int D3 = 6;
const int D4 = 3;
const int SWITCH = 15; // digital pin 2 connected to SW output of JoyStick
const int X_AX = A1; // analog pin 0 connected to X output of JoyStick
const int Y_AX = A0; // analog pin 1 connected to Y output of JoyStick
int range = 10; // output range or speed of X or Y movement
int responseDelay = 5; // response delay of the mouse, in ms
int threshold = range / 4; // resting threshold
int center = range / 2;
int EMGState = HIGH;
int L1S = LOW;
int L2S = LOW;
int P1S = LOW;
int R1S = LOW;
int R2S = LOW;
int P2S = LOW;
int D1S = LOW;
int D2S = LOW; //PREVIOUS STATES
int D3S = LOW;
int D4S = LOW;
void setup()
{
pinMode(EMG, INPUT);
pinMode(L1, INPUT);
pinMode(L2, INPUT);
pinMode(P1, INPUT);
pinMode(D1, INPUT);
pinMode(D2, INPUT);
pinMode(D3, INPUT);
pinMode(D4, INPUT);
pinMode(R1, INPUT);
pinMode(R2, INPUT);
pinMode(P2, INPUT);
pinMode(SWITCH, INPUT_PULLUP);
Serial.begin(9600);
Keyboard.begin();
Mouse.begin();
}
void loop()
{
EMGState = digitalRead(EMG);
if (EMGState == HIGH)
{
Serial.println("FAULT");
Keyboard.releaseAll();
Keyboard.end();
Mouse.end();
}
else
{
//Serial.println("OK");
int L1STATE = digitalRead(L1);
int L2STATE = digitalRead(L2);
int P1STATE = digitalRead(P1);
int D1STATE = digitalRead(D1);
int D2STATE = digitalRead(D2);
int D3STATE = digitalRead(D3);
int D4STATE = digitalRead(D4);
int R1STATE = digitalRead(R1);
int R2STATE = digitalRead(R2);
int P2STATE = digitalRead(P2);
if(L1STATE==HIGH && L1S == LOW)
{
Serial.println("L1 PRESSED");
Keyboard.press('K'); //K
}
if(L1STATE==LOW && L1S == HIGH)
{
Serial.println("L1 RELEASED");
Keyboard.release('K'); //K
}
if(L2STATE==HIGH && L2S == LOW)
{
Serial.println("L2 PRESSED");
Keyboard.press('J'); //J
}
if(L2STATE==LOW && L2S == HIGH)
{
Serial.println("L2 RELEASED");
Keyboard.release('J'); //J
}
if(P1STATE==HIGH && P1S == LOW)
{
Serial.println("P1 PRESSED");
Keyboard.press('H'); //H
}
if(P1STATE==LOW && P1S == HIGH)
{
Serial.println("P1 RELEASED");
Keyboard.release('H'); //H
}
if(R1STATE==HIGH && R1S == LOW)
{
Serial.println("R1 PRESSED"); //L
Keyboard.press('L');
}
if(R1STATE==LOW && R1S == HIGH)
{
Serial.println("R1 RELEASED"); //L
Keyboard.release('L');
}
if(R2STATE==HIGH && R2S == LOW)
{
Serial.println("R2 PRESSED"); //G
Keyboard.press('G');
}
if(R2STATE==LOW && R2S == HIGH)
{
Serial.println("R2 RELEASED"); //G
Keyboard.release('G');
}
if(P2STATE==HIGH && P2S == LOW)
{
Serial.println("P2 PRESSED"); //F
Keyboard.press('F');
}
if(P2STATE==LOW && P2S == HIGH)
{
Serial.println("P2 RELEASED"); //F
Keyboard.release('F');
}
if(D1STATE==HIGH && D1S == LOW)
{
Serial.println("D1 PRESSED"); //W
Keyboard.press('W');
}
if(D1STATE==LOW && D1S == HIGH)
{
Serial.println("D1 RELEASED"); //W
Keyboard.release('W');
}
if(D2STATE==HIGH && D2S==LOW)
{
Serial.println("D2 PRESSED"); //A
Keyboard.press('A');
}
if(D2STATE==LOW && D2S==HIGH)
{
Serial.println("D2 RELEASED"); //A
Keyboard.release('A');
}
if(D3STATE==HIGH && D3S==LOW)
{
Serial.println("D3 PRESSED"); //S
Keyboard.press('S');
}
if(D3STATE==LOW && D3S==HIGH)
{
Serial.println("D3 RELEASED"); //S
Keyboard.release('S');
}
if(D4STATE==HIGH && D4S==LOW)
{
Serial.println("D4 PRESSED"); //D
Keyboard.press('D');
}
if(D4STATE==LOW && D4S==HIGH)
{
Serial.println("D4 RELEASED"); //D
Keyboard.release('D');
}
L1S = L1STATE;
L2S = L2STATE;
P1S = P1STATE;
R1S = R1STATE;
R2S = R2STATE;
P2S = P2STATE;
D1S = D1STATE;
D2S = D2STATE;
D3S = D3STATE;
D4S = D4STATE;
int xReading = readAxis(A1);
int yReading = readAxis(A0);
Mouse.move(xReading, yReading, 0);
if (digitalRead(SWITCH) == LOW)
{
if (!Mouse.isPressed(MOUSE_LEFT))
{
Mouse.press(MOUSE_LEFT);
}
}
else
{
if (Mouse.isPressed(MOUSE_LEFT))
{
Mouse.release(MOUSE_LEFT);
}
}
delay(responseDelay);
}
}
int readAxis(int thisAxis)
{
int reading = analogRead(thisAxis);
reading = map(reading, 0, 1023, 0, range);
int distance = reading - center;
if (abs(distance) < threshold)
{
distance = 0;
}
return distance;
}
第 3 步:切割、繪畫和焊接
首先根據游戲手柄的尺寸切割 PCB 并將按鈕和操縱桿模塊對齊。
然后用你選擇的顏色給游戲手柄上漆。
現在將按鈕和操縱桿焊接到通用 pcb 上。
然后借助一些強力膠將限位開關固定在它們的位置。
焊接其余組件并進行最終測試。
我附上了下面的圖片以供參考。

這是最終項目的樣子。

?
- 用于控制Arduino 10開關的PC應用程序
- 適用于Arduino的Adafruit NeoPixel Shield
- 適用于Arduino YUN、UNO和Nano的DIN導軌安裝
- 適用于Amazon Alexa的游戲Speed Tap開源
- 如何使用游戲手柄模塊制作Arduino SNAKE游戲
- 適用于帶ESP8266的Arduino和NodeMCU的Android應用程序
- 適用于ESP32的AWS IoT Arduino庫
- 適用于Arduino Uno板的簡單計時器
- 適用于PC和Android的Arduino游戲控制器
- 適用于Arduino 101的Azure RTOS ThreadX線程
- 首款適用于Arduino的藍牙家庭自動化擴展板
- 適用于負載開關應用的芯片AO3415數據手冊下載 26次下載
- 適用于MPLAB工具設計的多條忠告
- 適用于MPLAB? X IDE的MPLAB REAL ICE?在線仿真器用戶指南
- 適用于3V系統的電池切換電路
- 適用于內窺鏡鏡頭模組的環氧樹脂封裝膠 94次閱讀
- 介紹一種用于激光清障裝置的無線控制手柄 561次閱讀
- 如何使用Python和PinPong庫控制Arduino 1033次閱讀
- 使用Wii nunchuk手柄連接Arduino控制伺服電機的方法 4298次閱讀
- 如何使用Arduino Leonardo和MPU6050制作一個有線的手勢控制器 2966次閱讀
- 如何編寫適用于Go項目的Makefile 2241次閱讀
- dfrobotmicro:bitgamepad遙控手柄介紹 2043次閱讀
- 微雪電子micro:bit游戲手柄擴展板簡介 2219次閱讀
- 基于一種適用于SSL產品的LED控制電路設計 1194次閱讀
- dfrobot可編程游戲手柄 介紹 2392次閱讀
- 游戲手柄的工作原理及故障方法與檢修方法 1.9w次閱讀
- Super Sabre電源連接器系統,適用于大電流應用 926次閱讀
- 淺談Arduino和樹莓派的區別 2.1w次閱讀
- 基于SLH89F5162單片機的游戲手柄設計 6406次閱讀
- 適用于RS232串口的溫度檢測電路 2732次閱讀
下載排行
本周
- 1涂鴉各WiFi模塊原理圖加PCB封裝
- 11.75 MB | 76次下載 | 1 積分
- 2錦銳科技CA51F2 SDK開發包
- 24.06 MB | 29次下載 | 1 積分
- 3錦銳CA51F005 SDK開發包
- 19.47 MB | 3次下載 | 1 積分
- 4蘋果iphone 11電路原理圖
- 4.98 MB | 3次下載 | 2 積分
- 5基礎模擬電子電路
- 3.80 MB | 3次下載 | 1 積分
- 6RA-Eco-RA6M4-100PIN-V1.0開發板資料
- 34.89 MB | 1次下載 | 免費
- 7STM32F3系列、STM32F4系列、STM32L4系列和STM32L4+系列Cortex-M4編程手冊
- 3.32 MB | 1次下載 | 免費
- 8聯想A820t手機維修圖紙包括主板原理圖 尾板原理圖 點位圖
- 0.62 MB | 次下載 | 5 積分
本月
- 1AI智能眼鏡產業鏈分析
- 4.43 MB | 383次下載 | 免費
- 2蘇泊爾電磁爐線路的電路原理圖資料合集
- 2.02 MB | 296次下載 | 5 積分
- 3貼片三極管上的印字與真實名稱的對照表詳細說明
- 0.50 MB | 94次下載 | 1 積分
- 4長虹液晶電視R-HS310B-5HF01的電源板電路原理圖
- 0.46 MB | 91次下載 | 5 積分
- 5涂鴉各WiFi模塊原理圖加PCB封裝
- 11.75 MB | 76次下載 | 1 積分
- 6錦銳科技CA51F2 SDK開發包
- 24.06 MB | 29次下載 | 1 積分
- 7AO4803A雙P通道增強型場效應晶體管的數據手冊
- 0.11 MB | 28次下載 | 2 積分
- 8長虹液晶彩電LS29機芯的技術資料說明
- 3.42 MB | 16次下載 | 2 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935127次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191388次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183342次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81588次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73815次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評論