資料介紹
描述
大家好,我是 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?在線仿真器用戶指南
- 適用于PDA的PLC編程系統開發
- 介紹一種用于激光清障裝置的無線控制手柄 399次閱讀
- 如何使用Python和PinPong庫控制Arduino 718次閱讀
- 使用Wii nunchuk手柄連接Arduino控制伺服電機的方法 3697次閱讀
- 如何使用Arduino Leonardo和MPU6050制作一個有線的手勢控制器 2625次閱讀
- 如何編寫適用于Go項目的Makefile 2074次閱讀
- dfrobotmicro:bitgamepad遙控手柄介紹 1908次閱讀
- 微雪電子micro:bit游戲手柄擴展板簡介 1983次閱讀
- 基于一種適用于SSL產品的LED控制電路設計 1071次閱讀
- dfrobot可編程游戲手柄 介紹 2238次閱讀
- 游戲手柄的工作原理及故障方法與檢修方法 1.9w次閱讀
- Super Sabre電源連接器系統,適用于大電流應用 854次閱讀
- 適用于大功率動力馬達逆變器的IGBT模塊 7476次閱讀
- 淺談Arduino和樹莓派的區別 2.1w次閱讀
- 基于SLH89F5162單片機的游戲手柄設計 6086次閱讀
- 適用于RS232串口的溫度檢測電路 2597次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多