一、实验目的
- 综合应用程序结构、数据集合与表示、信号生成与处理等方法。
- 掌握使用软件模拟硬件按键输入方法。
- 掌握设计综合应用程序的项目管理方法。
二、实验仪器及材料
主要设备有计算机,LabVIEW 2016软件。
三、实验内容及步骤
- 列出项目设计思路,包含哪些文件及层次,截图如下。
需要新建一个项目:简易电子乐器,在电子琴为程序主框图的基础上,新建文件夹子VI放置主要器件、自定义按键、最后考虑到说明书及声音优化文件
图1-1:项目文件及层次
- 基本功能(基础分)
图2-1:基础功能【前面板】
【1】播放音乐功能
由于先要能控制发出声音,在实验三内容五的基础上,使用布尔按钮模拟钢琴的按键,按下不同的按键可以发出对应音高的声音,根据音高与频率对照表对应相位和频率直接进行相应的调整即可。
【2】按键控制功能
思考怎么将按键转为输入,本来按键刚好八个想直接转换为000-111,但是没有找到合适的转换键,于是直接数组输出为数值,那么对应的转换为十进制数即对应不同音调即可,先将8个布尔值组成布尔数组,然后利用Boolean Array To Number函数即可将布尔数组转成数字255,11111111和255其实是一样的,可以在数值控件上右击选择Visible Items>>Radix然后点击数值控件左端的进制图标,选择Binary就可以看到255变成11111111了。如果给布尔值编号1-8,那么对应11101111应该是编号8-1,对应5号布尔值为假。这个是个高低位问题,需要注意。
图2-3按键输出音乐【后面板】
【3】音调输出功能
在这个部分出现了声音连续输出的情况,通过波形发现所有的这个程序本身配置了连续生成的声音输出,所以一直是刺耳的声音,由于程序主要是做一个钢琴,所以决定把赘余的部分(以上程序发出声音较为刺耳)去掉,直接用波形输出声音就行。
通过比对和实验,发现问题所在既不是数组转化错误也不是选择结构错误,而是由于将数值进行判断时设置默认应当为空,否则就会一直延续一个声音,很小的问题,但是造成了一些困扰。
图2-4程序简化【后面板】
如果不考虑全部情况,那么选择默认为空,需要将发音器加入选择结构中,如若考虑全部,则无需加入,可简化程序。
最后将所有音都有对应的音调输出,才可将发音模块放在外面。
图2-5程序优化【后面板】
- 美化界面(有加分)
做到这里的时候想看其他乐器如何美化,然后找到了很多电子琴程序,开始琢磨运行原理,发现实现方法不同,很多案例里已经做的非常完善了,自己开始设置程序进行调整, 控件还是主要为按键,其他的包括希望能键盘操作和声音优化的控件。
图3-1程序美化【后面板】
图3-2程序美化【前面板】
- 扩展功能(有加分)
- 使其既可按键输出也可通过键盘输出。
- 使用声音文件优化声音(同理即可播放音乐)。
(1)既可按键输出也可通过键盘输出。
- 第一步使用键盘输出功能,可以正常运行
图4-1用键盘控制的输出【后面板】
- 第二步想要对应都实现,想要选用共同选择结构但是输入排斥,此时我想知道其它案例是如何共同达到的,最后在labview中查找用法时看到案例用事件结构实现相应功能,因此开始转换思路进行调整。
图4-2钢琴案例里的输出【后面板】
- 但是以上方法只是能看懂通过判断按键是否按下进行输出,但是具体如何扫描代码分类数据和按键还是不大懂,经过一段时间的纠结,还是决定回到自己的程序,直接使用加法进行融合,由于用户不可能同一时间点按键和键盘,所以程序如此设计可以实现两者控制的功能。
图4-3实现两种方式弹奏【后面板】
(2)使用音乐获取音乐文件,在网上下载好听的钢琴音色进行读取输出即可,此时。
图4-4实现两种方式弹奏【后面板】
图4-5运行后声卡不支持,需要添加硬件【后面板】
四、总结
- 本实验要点和难点
- 如何比较简单的将按键转为输入。
- 调试过程用选择结构没有将“默认”设为空,导致声音连续输出的情况
- 如何使该电子乐器既可以虚拟按键演奏也可以在电脑键盘上演奏。
- 如何优化声音,使其更偏向于钢琴的声音。
- 心得体会
这是个很有趣的实验,尤其在钢琴网站上尝试了成型的乐器,想要做出相似的至少完成大部分功能,于是一开始以实验三第五个为基础开始进行构建,在完成基本功能上会出现问题但是也没有难以解决的问题,之后进行前面板的美化,去看更多的程序是如何美化的发现有很多做的很好的案例,于是开始大量阅读学习,有一些部分很清楚了,但也有一些部分没有使用过相关控件但是在其中出现了各种各样的问题,主要体现为以上的难点, 总结解决方法如下:
- 通过选择结构进行对应频率的输入,这样比较清晰并且很方便增加按键。
- 分析逻辑时需要清楚没有输入时有没有置零,如果没有设置“默认”在测试过程就会出现缺少匹配的情况,如果“默认”不为空,那么输出就会持续为这个频率的情况。
- 对于两种方式输入的情况,其实案例里做的很好了,但是事件结构的一些赋值我还是不很清楚,最后还是决定就用两个选择进行设计。
- 通过读取音乐文件并播放的方式优化声音。
总体来说,基本功能比较好实现,而扩展功能有很多种方法实现,介于现在对于控件的了解,只是通过比较简单的设计完成了功能,并且完成了钢琴具有的完整功能,但是由于硬件不足,声卡无法支持声音优化功能,并且整体上程序还不够优化,希望之后还能有机会更好的学习控件且能够使用控件,完成独属于自己的“乐器”。
实验五 健身计时器
一、实验目的
- 综合应用程序结构、数据集合与表示等方法。
- 掌握使用软件模拟硬件7段数码管显示方法。
- 掌握设计综合应用程序的项目管理方法。
二、实验仪器及材料
主要设备有计算机,LabVIEW 2016软件。
三、实验内容及步骤
- 列出项目设计思路,包含哪些文件及层次,截图如下。
需要新建一个项目:健身计时器,在数码管为程序子vi的基础上,新建文件夹放置主要器件、自定义按键、内存中的项主要包含七个数码灯,最后考虑到说明书及音乐输入播放的文件。
- 基本功能(基础分)
(基本功能)在项目中创建一个 VI,输入一个数字,将其通过使用方形布尔指示灯模拟段数码管进行显示,如下左图为 7 段数码管硬件电路,右图为软件模拟效果。将此 VI 作为一个 子 VI ,供后续调用。
图2-1定义一个数码管vi【前后面板】
3. (基本功能)创建 VI ,模拟如下链接中的视频左上角设计一个健身计时器。
【1】设计计时器
先设置一个倒计时的计时器,此处调用上一部分制作的子vi。
图3-1设置一个调用数码管vi的倒计时器【前后面板】
【2】设计多运动倒计时:通过事件结构设计不同运动从第一个顺序倒计时到最后一个。
图3-2各自项目实现倒计时【前面板】
【3】设计多运动两位数倒计时:通过事件结构设计不同运动从第一个顺序倒计时到最后一个,并通过除数取余实现两位数的数码管显示,最终实现前两个运动顺序倒计时,最后完成结束运动的10s倒计时。
图3-3实现两位数的倒计时【前面板】
图3-3以上实现两次运动、10s结束的倒计时【后面板】
4.美化界面(有加分)
图4-1程序美化【前面板】
- 扩展功能(有加分)
- 添加快进和后退10s的功能,快进后速度明显加快。
图5-1快进功能【前面板】
- 添加音乐和动作指导,提升舒适感和准确性。
其实实现的就是1个播放音乐文件的功能,在不同的运动框架里放上不同的音乐文件即可实现,此处采用上一实验钢琴的文件。
图5-2音乐播放功能【前面板】
图5-3最终计时界面【前面板】
四、总结
(一)本实验要点和难点
- 如何进行数码管子vi的设计并应用。
- 注意不同运动的顺序执行
- 如何使倒计时更加人性化。
(二)心得体会
这是个很实用的实验,考察了很多细节的知识点,需要我们在前三节软件的基础上,通过现实生活的例子,做出人性化的设计,本实验是设计一个健身计时器,以此来计时人们锻炼的时间。后疫情时代身体还是第一位的,我们需要认真进行锻炼,此计时器很好的监督着大家的锻炼,适合我们身体恢复。
对于以上问题,我采取了以下措施:
- 其实主要还是分析数字应该亮的数码管,用选择case结构进行不同数字的输出
- 对于不同运动如何顺序执行,我一开始想到的是平铺式顺序结构,使其一项一项顺序计时,但是这样只有所有数据与结构相连时,平铺式顺序结构才开始执行。所有帧执行完毕后,各个帧才返回连线的数据。层而叠式顺序结构可确保子程序框图按顺序执行。最终选择层叠式顺序结构进行运动的进行的结构。
- 其实生活中,我也经常使用KEEP软件,其中计时与这个很像,我尽可能还原其进度,也想到其快进和后退的功能,时间充足的话很想做一个一样的程序。