软硬结合——酷我音乐盒的逆天玩法

2017-10-20 18:31

  LZ是纯宅男,一天从早上8:00起一直要呆在电脑旁到晚上12:00左右吧~平时也没人来闲聊几句,刷空间暑假也没啥动态,听音乐吧...~有些确实不好听,于是就不得不打断手头的工作去点击下一曲或是找个好听的歌来听...但是,[移动手锁定鼠标--移动鼠标关闭当前页面选择音乐软件页面--选择合适的音乐--恢复原来的界面]这一过程也会烦人不少,如果说软件的设计要在用户体验上做足功夫,感觉这一点是软件设计人员很难管住的方面,毕竟操作系统也就这样安排的嘛(当然,有些机智的开发人员加了几个热键,确实方便了不少!)。于是我想能不能设计一个软件能尽量少打断我们正常的工作简单操作去触发下一曲~

  下图左一是传统的操作模式,在这里要人的眼、手并用而且还必须等待记忆,可能我们平时感觉不到,但是这个过程却是比较浪费时间且分散注意力!

  下图右一是想改为的操作模式,在这里我们只需要外部触发(如:摇一下头或者微笑一下,甚至只要想一下就可以啦),让切歌任务在后台进行,这样就能不打断前台工作(这里的前台和后台只是当前工作窗口和非当前窗口,和专业的有差别!)

  硬件采用STC89C52单片机最小系统占用P1.0和P1.1两个端口和超声波测距模块HC-SR04,通过根据遮挡物在超声波测距范围内停留的时间来发出触发“下一曲”,“暂停”,“上一曲”事件的信号。

  软件采用C#串口读取单片机发送的触发事件信号消息,然后调用WinAPI对音乐盒窗口进行识别计算以及发送点击消息,来控制切换歌曲。

  哈哈,秒懂啦吧!图中那个像望远镜的东西就是超声波测距模块,它的前面辐射状的空间(我设置为40cm)就是有效范围,那个黑色的像蜈蚣的东西就是单片机(就相当于电脑里的CPU),插在USB里面的不用介绍就是USB转TTL啦!主要就是负责采集传感器信号然后将距离信息通过USB发送给电脑。最终达到达到的效果是:你的手只要在区域内挥一下,就能切歌啦!手停长一点时间就能暂停啦!这个玩法没试过吧,哈哈!

  下面这个图就是基于C#的电脑端软件,其主要功能就是连接串口进行数据接收、数据处理、以及查找音乐盒的窗口、计算该点击的按钮、发出点击消息、在不同窗口中切换(因为要实现少打扰当前活动的目的)。这里为了测试方便所以加了3个功能按钮:上一曲、暂停、下一曲,通过点击这些按钮能实现控制酷我音乐盒歌曲的切换,然后右边加了个下拉框用来枚举当前可用串口,LINK按钮就是连接该串口的触发按钮。下面一个文本显示区是用来显示串口传过来的距离的数据的(便于调试哈~)

  该部分要用到很多WindowsAPI,主要功能就是查找窗口句柄、控制窗口显示、计算窗口、聚焦窗口、窗口切换....算是把窗口有关的常用API都用上啦~此外,还用到了鼠标光标设定、鼠标点击消息发送最终达到模拟鼠标点击事件。当然,串口通信绝对不能少滴!

  整体的功能就是通过第4行的函数获取所有可用串口,然后加入下拉框显示,如果有可用的就把第一个选中;

  PS:整体很好理解就是把下拉框选中的串口号连接上,这里第12行比较重要,它调用SerialDataReceivedEventHandler(FuncName)来定义一个数据接收函数的句柄,这里PortDataReceived你可以随便写,但是接下来你要写对应的实现函数:(这里说句柄比较难理解,你就理解成一个函数,绑定串口的函数,一旦串口有数据发动过来就执行这个函数....)

  PS:这就是串口数据接收函数实现,先别看其他内容,因为里面涉及滤波算法和控制信号生成的算法,只要看第7~13行的代码核心部分就是第9行从缓冲区读取串口数据放到data[]数组中,这样串口数据就放在data[]中啦!怎么处理是下面的事啦~