×

基于Arduino的DIY游戏控制器

消耗积分:0 | 格式:zip | 大小:0.03 MB | 2022-08-12

h1654155701.3944

分享资料个

威廉希尔官方网站 板图如下:
poYBAGL0WtqAC2yWAAC-dm-uS_4755.png
poYBAGL0Wt2Ac_PkAAB4GcDvh90183.png
pYYBAGL0WuCAMH7EAACIIHvnW_4314.jpg
 

成分

Arduino Pro Mini 328-3.3V/8MHz × 1
MHPS2273
APEM公司
× 8

描述

基于 Arduino 的 DIY 游戏控制器 | Arduino PS2 游戏控制器

大家好,玩游戏总是很有趣,但是用自己的 DIY 自定义游戏控制器玩会更有趣。

所以我们将使用arduino pro micro制作一个游戏控制器

pYYBAGL0WvOAa-ByAACCy9xIN0s862.jpg

所以这里的一个建议是:请不要用 Arduino Uno 尝试这个项目,因为 Arduino Uno 不具备 HID(人机接口设备)的能力,这意味着 Arduino Uno 不能用于制作键盘、鼠标、键盘等项目,游戏手柄等

所以对于像键盘、鼠标和游戏控制器这样的项目,我们有两个能够完成这些项目的 arduino 板。Arduino Pro micro 和 Arduino Leonardo 能够完成此类项目。

poYBAGL0WvWAJE19AAChvq9vYv0623.jpg

因此,对于我们的游戏控制器项目,我们将在这里使用 Arduino pro micro,但如果您有 Arduino Leonardo,那么它也可以使用。

对于这个游戏控制器,我将使用按钮开关作为输入,因为它们很容易到达任何地方并且易于使用,但是如果您想使用任何其他类型的输入,您可以使用它,但请确保您的输入将与代码一起使用.

pYYBAGL0WviAcSgWAABxJy4RoNk922.jpg

所以我们需要 10 个开关用于 10 个输入,我们需要根据上面显示的 schmatics 连接这些开关,所以请自行使用上述 schmatics 并根据它连接所有东西。

poYBAGL0WvuACZb2AABz5tZTjPQ022.png

poYBAGL0Wv2ALJl6AACmU1GpCjQ424.jpg

为了把它们放在一起,我们需要为它制作一个 PCB,以便我们可以将所有东西连接在一起。我将 Fritzing 用于 PCB 设计目的。

您可以从以下链接下载 Gerber 文件。

pYYBAGL0WwCAApEOAACIb2zU81U276.jpg

我将我的 gerber 文件上传到 pcbway 网站。

您也可以从他们那里订购 PCB

poYBAGL0WwKAfBz7AABsPWxj69A174.jpg

因此,在制造出 PCB 之后,我们需要通过焊接排针和 PCB 上的开关将它们组装在一起。并将 Arduino pro micro 放在 PCB 上。

因此,在编码部分,我们需要为该板编程,用于显示键盘输入的开关,如图所示,我已经根据它编写了代码,所以如果从下面的链接下载。

下载代码、schmatics、gerber:

poYBAGL0WwqAbCLaAACXw3l7e-w090.jpgpoYBAGL0Ww2AP6_0AACM7rZR8H4955.jpgpYYBAGL0Ww-Ae0ICAACDYG-BvOY309.jpg

然后确保您在 PC 中安装了 sparkfun 板,如果没有,请转到 sparkfun 页面并按照说明在 arduino IDE 中安装 sparkfun 板。

然后将代码上传到您的arduino板

poYBAGL0WwqAbCLaAACXw3l7e-w090.jpgpYYBAGL0WvOAa-ByAACCy9xIN0s862.jpg

上传代码后,请将 USB 电缆连接到 PC,连接后打开您喜欢的任何游戏,我在这里使用铁拳,您可以开始玩了。

所以玩得开心制作自己的 DIY 游戏控制器。

 

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'基于Arduino的DIY游戏控制器',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);