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


根據(jù)上面給出的電路圖(第一個(gè)圖像)連接所有組件。
我建議首先檢查所有連接并在面包板上工作。
按鍵映射:
我實(shí)際按鈕放置的布局也顯示在上面(第二張圖片),讓您清楚地知道哪個(gè)按鈕位于何處,它使用什么標(biāo)簽編程以及它向計(jì)算機(jī)發(fā)送什么字符。
第 2 步:Arduino 代碼
現(xiàn)在下載代碼并安裝 mouse.h 和 keyboard.h 庫。將代碼上傳到您的 Arduino。
您可以從下面復(fù)制代碼。
#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 步:切割、繪畫和焊接
首先根據(jù)游戲手柄的尺寸切割 PCB 并將按鈕和操縱桿模塊對齊。
然后用你選擇的顏色給游戲手柄上漆。
現(xiàn)在將按鈕和操縱桿焊接到通用 pcb 上。
然后借助一些強(qiáng)力膠將限位開關(guān)固定在它們的位置。
焊接其余組件并進(jìn)行最終測試。
我附上了下面的圖片以供參考。

這是最終項(xiàng)目的樣子。

?
- 用于控制Arduino 10開關(guān)的PC應(yīng)用程序
- 適用于Arduino的Adafruit NeoPixel Shield
- 適用于Arduino YUN、UNO和Nano的DIN導(dǎo)軌安裝
- 適用于Amazon Alexa的游戲Speed Tap開源
- 如何使用游戲手柄模塊制作Arduino SNAKE游戲
- 適用于帶ESP8266的Arduino和NodeMCU的Android應(yīng)用程序
- 適用于ESP32的AWS IoT Arduino庫
- 適用于Arduino Uno板的簡單計(jì)時(shí)器
- 適用于PC和Android的Arduino游戲控制器
- 適用于Arduino 101的Azure RTOS ThreadX線程
- 首款適用于Arduino的藍(lán)牙家庭自動(dòng)化擴(kuò)展板
- 適用于負(fù)載開關(guān)應(yīng)用的芯片AO3415數(shù)據(jù)手冊下載 26次下載
- 適用于MPLAB工具設(shè)計(jì)的多條忠告
- 適用于MPLAB? X IDE的MPLAB REAL ICE?在線仿真器用戶指南
- 適用于PDA的PLC編程系統(tǒng)開發(fā)
- IEC 62368標(biāo)準(zhǔn)適用于哪些產(chǎn)品 756次閱讀
- 艾為電子芯片產(chǎn)品在游戲手柄中的應(yīng)用方案 1.5k次閱讀
- 介紹一種用于激光清障裝置的無線控制手柄 1.3k次閱讀
- 如何使用Python和PinPong庫控制Arduino 2.1k次閱讀
- 使用Wii nunchuk手柄連接Arduino控制伺服電機(jī)的方法 6.5k次閱讀
- 如何使用Arduino Leonardo和MPU6050制作一個(gè)有線的手勢控制器 4.2k次閱讀
- 如何編寫適用于Go項(xiàng)目的Makefile 2.8k次閱讀
- dfrobotmicro:bitgamepad遙控手柄介紹 2.6k次閱讀
- 微雪電子micro:bit游戲手柄擴(kuò)展板簡介 2.9k次閱讀
- 基于一種適用于SSL產(chǎn)品的LED控制電路設(shè)計(jì) 1.5k次閱讀
- dfrobot可編程游戲手柄 介紹 3.1k次閱讀
- 游戲手柄的工作原理及故障方法與檢修方法 2.1w次閱讀
- Super Sabre電源連接器系統(tǒng),適用于大電流應(yīng)用 1.2k次閱讀
- 淺談Arduino和樹莓派的區(qū)別 2.3w次閱讀
- 基于SLH89F5162單片機(jī)的游戲手柄設(shè)計(jì) 1w次閱讀
下載排行
本周
- 1新一代網(wǎng)絡(luò)可視化(NPB 2.0)
- 3.40 MB | 1次下載 | 免費(fèi)
- 2冷柜-電氣控制系統(tǒng)講解
- 13.68 MB | 1次下載 | 10 積分
- 3MDD品牌三極管MMBT3906數(shù)據(jù)手冊
- 2.33 MB | 次下載 | 免費(fèi)
- 4MDD品牌三極管S9012數(shù)據(jù)手冊
- 2.62 MB | 次下載 | 免費(fèi)
- 5LAT1218 如何選擇和設(shè)置外部晶體適配 BlueNRG-X
- 0.60 MB | 次下載 | 3 積分
- 6LAT1216 Blue NRG-1/2 系列芯片 Flash 操作與 BLE 事件的互斥處理
- 0.89 MB | 次下載 | 3 積分
- 7收音環(huán)繞擴(kuò)音機(jī) AVR-1507手冊
- 2.50 MB | 次下載 | 免費(fèi)
- 8MS1000TA 超聲波測量模擬前端芯片技術(shù)手冊
- 0.60 MB | 次下載 | 免費(fèi)
本月
- 1愛華AIWA HS-J202維修手冊
- 3.34 MB | 37次下載 | 免費(fèi)
- 2PC5502負(fù)載均流控制電路數(shù)據(jù)手冊
- 1.63 MB | 23次下載 | 免費(fèi)
- 3NB-IoT芯片廠商的資料說明
- 0.31 MB | 22次下載 | 1 積分
- 4UWB653Pro USB口測距通信定位模塊規(guī)格書
- 838.47 KB | 5次下載 | 免費(fèi)
- 5蘇泊爾DCL6907(即CHK-S007)單芯片電磁爐原理圖資料
- 0.04 MB | 4次下載 | 1 積分
- 6蘇泊爾DCL6909(即CHK-S009)單芯片電磁爐原理圖資料
- 0.08 MB | 2次下載 | 1 積分
- 7100W準(zhǔn)諧振反激式恒流電源電路圖資料
- 0.09 MB | 2次下載 | 1 積分
- 8FS8025B USB的PD和OC快充協(xié)議電壓誘騙控制器IC技術(shù)手冊
- 1.81 MB | 1次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191439次下載 | 10 積分
- 5十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183353次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81602次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73822次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App





創(chuàng)作
發(fā)文章
發(fā)帖
提問
發(fā)資料
發(fā)視頻
上傳資料賺積分
評論