×

基于Arduino UNO的电子钢琴键盘

消耗积分:0 | 格式:rar | 大小:1.61 MB | 2022-12-21

香香技术员

分享资料个

本方案是一个基于 Arduino UNO 的电子钢琴键盘。最近,我对压电蜂鸣器和所涉及的编码有了更多的了解,这是我根据迄今为止所学知识的创作。新功能或开关有很大的扩展空间,我计划稍后再做,但现在要迎接下一个挑战!

下面是该设备如何工作的视频,包括预设歌曲的菜单。我承认,技术上歌曲 4 和 5 是相同的,但我能说的是,我有创造更大更好的东西的冲动,为更多歌曲编写音乐代码不是其中之一!主循环和单个歌曲循环的基本编码很容易适应您自己的想法,因此您可以随意更改任何您认为合适的内容。

如何设置硬件
钢琴键...

钢琴键开关使用电阻梯连接。电阻器按顺序放置,将每个开关连接到电源。对于我的项目,我选择使用(以欧姆为单位)1M、10k、4.7K、1K、560 和 220。第一个钢琴开关(左侧)连接到电源,也连接到电路中的下一个开关。第二个开关连接到最小的电阻器,之后的每个开关连接到串联中的下一个最大的电阻器。最后一个开关通过一个 10k 欧姆电阻将连接接地,并将所有 7 个开关连接到 Arduino 上的“模拟输入”引脚 A0。主草图定义了与每个钢琴键相关联的音符频率。对于这个项目,我使用了 C4、D4、E4、F4、G4、A4 和 B4,其中 C4 是最左边的开关。改变频率值,

液晶屏

根据下面的电路图连接 LCD 引脚。将 LCD 引脚 3 连接到电位计以控制屏幕的对比度。电位器的外部引脚连接到电源和地以完成此电路。LCD 引脚 15 通过 220 欧姆电阻连接到电源。如果这些引脚中的任何一个在您自己的项目中发生变化,请相应地更新代码。

菜单切换

将菜单开关连接到电源,并通过 10K 欧姆电阻将其接地。此开关还应连接到 Arduino 上的引脚 7,以便您可以通过编码对其进行控制。

LED

LED用于指示您何时处于“菜单模式”,并且钢琴键已被禁用。一旦按下菜单开关,LED 灯就会亮起。将 LED 的阳极(正极)连接到 Arduino 的引脚 6,并通过 220 欧姆电阻将 LED 接地。

压电蜂鸣器

要集成压电蜂鸣器,只需将一端连接到 Arduino 引脚 8,另一端通过 220 欧姆电阻接地。代码中的“音调”函数将查找此引脚以播放所调用的音符。

代码如何工作
设置

草图首先导入“LiquidCrystal.h”和“pitches.h”库,以便我们稍后可以在代码中引用它们中的各种项目
接下来,通过定义菜单开关的名称来设置代码,确定哪些引脚是输入与输出,并为 7 个钢琴键中的每一个设置频率值
为每首歌曲创建了一个新标签,以保持我的代码有条理且更易于理解,并在以后进行扩展。如果您想删除或添加更多歌曲,只需确保更改主“电子键盘”草图中的代码即可。
主循环

键盘开始时 LED 关闭,所有钢琴键都处于活动状态
一旦循环检测到菜单按钮已被按下,它将禁用钢琴键并打开 LED 以指示您处于“菜单模式”
访问菜单

按菜单键循环播放当前歌曲,按任意钢琴键开始播放液晶屏上显示的歌曲
LCD 屏幕将显示当前正在播放的歌曲,然后在歌曲播放完毕后返回菜单中的同一点。从那里,您可以在可用歌曲列表中重播或继续。
双击菜单按钮将从头开始重新启动菜单
要返回使用钢琴键,请循环播放菜单中的其余歌曲。一旦 LCD 屏幕黑屏,并且 LED 熄灭,钢琴键将重新工作。

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

评论(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.lene-v.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 UNO的电子钢琴键盘',//标题 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.lene-v.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);