资料介绍
描述
大家好,我是 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人工智能+消费:技术赋能与芯片驱动未来
- 15.25 MB | 4次下载 | 免费
- 2⼯业电源&模块电源产品⼿册
- 15.40 MB | 1次下载 | 免费
- 379M15 TO-252三端稳压IC规格书
- 0.86 MB | 次下载 | 免费
- 4MBRD20150CT TO-252肖特基二极管规格书
- 0.54 MB | 次下载 | 免费
- 5自动锁螺丝运动控制系统用户手册
- 6.65 MB | 次下载 | 5 积分
- 6奥特光耦产品手册
- 4.83 MB | 次下载 | 免费
- 7SMA系列10MHz~40GHz同轴检波器
- 559.60 KB | 次下载 | 免费
- 8CD7388CZ:7W×4 四通道音频功率放大电路技术手册
- 0.39 MB | 次下载 | 10 积分
本月
- 1元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 241次下载 | 免费
- 2元宇宙底层硬件系列报告
- 13.42 MB | 184次下载 | 免费
- 32022 年展望報告 – 半導體產業
- 1.43 MB | 136次下载 | 免费
- 4晶振与滤波器应用电路《电子工程师必备:元器件应用宝典》
- 1.57 MB | 90次下载 | 免费
- 5汽车电子行业深度解析:智能化与电动化方兴未艾
- 6.47 MB | 71次下载 | 免费
- 6中国DPU行业白皮书
- 23.80 MB | 37次下载 | 免费
- 7晶科鑫代理线-微盟电子2021年度产品目录选型手册
- 14.75 MB | 27次下载 | 免费
- 8SJK晶振产品目录-简化版-2022
- 13.77 MB | 20次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935134次下载 | 10 积分
- 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
- 1.48MB | 420064次下载 | 10 积分
- 3Altium DXP2002下载入口
- 未知 | 233089次下载 | 10 积分
- 4电路仿真软件multisim 10.0免费下载
- 340992 | 191425次下载 | 10 积分
- 5十天学会AVR单片机与C语言视频教程 下载
- 158M | 183352次下载 | 10 积分
- 6labview8.5下载
- 未知 | 81602次下载 | 10 积分
- 7Keil工具MDK-Arm免费下载
- 0.02 MB | 73822次下载 | 10 积分
- 8LabVIEW 8.6下载
- 未知 | 65991次下载 | 10 积分
电子发烧友App






创作
发文章
发帖
提问
发资料
发视频
上传资料赚积分
评论