资料介绍
描述
大家好,我是 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次下载 | 免费
评论
查看更多