前言

一、任务书

二、目录

三、论文正文

摘要

ABSTRACT

1.引言

2.系统开发环境

2.1可行性分析

2.2 开发工具介绍

3.需求分析

3.1 功能需求分析

3.2 数据流程图

4.总体设计

4.1 系统整体模块设计

4.2 红外编码设计与蓝牙通信设计

4.3 系统功能结构设计

5.详细设计

5.1主界面设计

5.2 红外线模块

5.3 蓝牙控制模块

6.接收端测试

7.总结

参考文献

致  谢


 前言

        又到了一年的毕业季,苦逼的大学毕业生们也要开始决定自己未来的走向,但无论是要去考研考公,还是出去找地方做社畜,目前还有一个最大的难关,就是毕业论文。本人很幸运被老师选中做一个简单的手机APP,作为支撑项目,因此也准备了非常久,开发加撰写,以及不断修改足足花了大半年时间(新年依旧是码农),本来还以为结束了,突然被抽到外审,又改了好久。(因为代码固定格式的原因,所以查重率很高,和老师反应是否可以用图片,老师处于严谨pass掉了,没办法修改和删除部分代码了,又苦逼了好久)
        因为当初自己花了很多时间搜索材料,以及模板,有时常会感到资料的匮乏,模板的缺少,因此,将我的设计公开给大家参考,希望能帮助到大家。
        最后非常感谢我的导师给出的指导建议和修改建议,让我完成了这篇完美的论文(对我来说非常不错,哈哈),以及帮助我开发arduino的学长,非常感谢!!!

接下来,我将把主要内容展示出来,供大家参考。
完整主论文资源,参考:
附件:

 一、任务书

课题名称基于Android端开关控制系统的设计与实现

一、主要内容

        本文主要研究了一种基于Android端的无线开关控制系统。通过对现有开关控制方式的需求分析,设计出了一款基于Android端的红外蓝牙一体化开关系统,该系统主要有三大模块,红外线控制模块、蓝牙控制模块和百度搜索模块。该系统可以实现对照明灯开关的远程智能控制、操作简单、方便实用,实现一对多控制、多种控制方式并存的优势。

二、基本要求

        1.查阅与本论文相关的书籍文献资料。

        2.论文格式按照要求规范化撰写。

        3.文字表达通顺,结构逻辑合理。

          4.程序完整,能够正常运行且能实现相应功能。

三、论文(设计)工作起始日期

        自2021年11月15日起,至2022年4月30日止

四、进度与应完成的工作

第一阶段:阅读书籍、查找资料 (2021 11 月 15 日—2021 年 12 月 31 日)

第二阶段:系统设计、论文初稿  (2022 1 月 1 日—2022 3 月 10 日)

第三阶段:论文修改及电子档送检(2022 3 月 11 日—2022 3 月 20 日)

第四阶段:论文定稿、打印      (2022 3 月 21 日—2022 4 月 15 日)

 第五阶段:论文答辩准备及答辩  (2022 4 月 16 日—2022 4 月 29 日)

五、主要参考文献、资料

[1]   艾媒网《手机行业数据分析:2021年中国网民智能手机操作系统为安卓的占比89.6% 》.(2021-08-03)[2022-02-27]

[2]   华清远见 《Android开发平台五大优势》技术文章[2022-03-09]

[3]   田志颖. 基于Android的移动学习软件设计与实现[D].曲阜师范大学,2016.

  [4] 张海藩.软件工程导论.清华大学出版社,1900:18-124.

二、目录

 

...

三、论文正文

基于Android端开关控制系统的设计与实现

摘要

随着物联网的快速发展,万物互联已成为未来发展的总趋势。为了实现对无线自发电照明灯开关的方便控制,本文主要研究了一种基于Android端的无线开关控制系统。通过对现有开关控制方式的需求分析,设计出了一款基于Android端的红外蓝牙一体化开关系统,该系统主要有三大模块,红外线控制模块、蓝牙控制模块和百度搜索模块。在系统开发中,主要使用Java作为开发语言,通过Android Studio开发平台对发射端的红外线功能和蓝牙功能进行设计和编程实现,通过arduino开发平台对接收端进行信号处理和设备调试。在测试中,利用Android Studio开发平台连接到Redmi Note 8 Pro进行真机运行,实现开关控制系统中的红外线控制功能、蓝牙控制功能和百度搜索功能。该系统可以方便实现对照明灯开关的远程智能控制、操作简单、方便实用,实现一对多控制或与多种控制方式并存的优势。

关键字:Android;红外线控制;蓝牙控制;物联网控制;Android Studio

Design and Implementation of Switch Control System Based on Android

ABSTRACT

With the rapid development of the Internet of Things, connecting all things has become a general trend for future development. In order to achieve a comfortable control of a wireless self-generating lamp, this paper shall be examined mainly by the Android-based wireless control system. An analysis of the demand for existing switcher control methods suggests an Android based infrared integrated Bluetooth switch. The system has three modules in particular: the infrared control module, the Bluetooth control module and the Baidu search module. In the development of the system, Java is mainly used as development language, infrared and Bluetooth terminal functions are designed and programmed through the Android Studio development platform and the receiving end is connected through the Arduino development platform for signal processing and debugging devices. The test shall use the Android Studio Development Platform for the implementation of the infrared control function, the Bluetooth control function and the Baidu search function in the control switch. The system can easily implement the remote intelligent control of the light switch with simple operation, comfort and practical capability and realise the benefits of one to many controls or coexistence with several controlled modes.

Keywords: Android; Infrared control; Bluetooth control; Internet of things control; Android Studio

1.引言

        随着科技的发展,各类电子产品层出不穷,手机的普及更是给人们的日常生活增添了诸多便利。现如今,手机基本是每个人生活的必需品,人手一部手机基本成为现实,智能手机市场不断扩大。从2021年中国网民智能手机操作系统使用比例来看,Android系统仍然占据半壁江山,使用比例将近九成[1],而其成为主流的主要原因是Android系统以其开放的平台、众多的免费应用、华丽新颖的操作界面、简单友好的用户体验。而对于开发者而言,Android开发平台具有多种开发优势[2]。一是开放性。开放的平台允许任何移动终端厂商加入到Android中来,使得其有更多的开发者,随着用户和应用的日益丰富,Android开发平台也会更加成熟,多种插件和应用库也会给开发者带来非常大的便利。二是丰富的硬件选择。 由于Android的开放性,开发者可以根据自己的需要来设计软件系统,得到各式各样的特色软件。而功能的差异和特性,既不会影响软件的兼容性和数据同步。第三是Google应用程序的无缝组合。如今Google成立已经有二十多年的历史,从单纯的搜索到全面的互联网渗透,Google服务早已经成为连接用户和互联网的重要部分,作为Google推荐的官方发开平台,Android平台将无缝结合Google服务。Android应用的需求势必会越来越大,这是一个潜力巨大的市场。

        近年来,物联网迅速发展,万物互联已然是大势所趋,无线控制、智能家居等物联网控制纷纷成为现实。在现实生活中,实物开关的控制是很普遍的,但是随着时代的发展,用户不仅仅需要通过现实开关进行控制,还需要使用手机达到控制的效果,既能实现正常的开关控制,也能使用手机控制。现有一款无线自发电照明灯开关项目,相对其他产品,无线自发电照明灯开关已经有了一些天然优势,无需电池可进行自我发电发射信号。我国发展全局的重要发展理念是绿色、环保、节能,无线自发电照明灯开关是根据手按压开关面板时产生的短暂的机械动能转换成电能,这就很好的解决了电池更换问题,而项目的优势是建立在原有的无线电开关基础之上,有效解决了漏触电的风险。但是,无线自发电照明灯开关想要在当前时代发展还需要跟上时代的脚步。抛开自身自发电的优势,也需要有在物联网上的控制功能,这样才能在市场中有其一席之地。而基于Android端的红外蓝牙一体化开关就是基于无线自发电照明灯开关的物联网拓展软件,主要是辅助其在互联网上的控制,表现在于通过手机达到控制的效果,这样就能填补无线自发电照明灯开关在物联网方面的空白,也使得开关在控制时更加便捷。

        基于Android系统的红外蓝牙一体化开关分为三个部分,第一个部分是红外线控制端,利用红外线发射信号,使控制端收到红外信号后控制LED灯。第二部分是蓝牙控制端,使蓝牙与控制端建立连接,当接收端接收到信号后控制LED灯。第三部分是百度搜索界面,为用户提供简单的搜索功能。

        本论文将对其控制的原理,包括红外线控制和蓝牙控制,以及接收端的实现进行详细的阐述,实现红外控制、蓝牙控制和百度界面三个功能。

2.系统开发环境

2.1可行性分析

        近年来,随着移动设备的高速发展,移动设备越来越智能化,人们越来越离不开这些给日常生活带来极大便利的智能机,智能机的出现,极大的提高人们的工作学习效率,增加获得信息的渠道,突破了空间的限制,让你随时随地感受到外面的世界。开关控制系统可以基于Android系统进行开发,协助无线自发电照明灯开关的控制,使控制多样化。

        可行性分析既不能以偏盖全,也不能过于追求细节,必须为决策提供有价值的证据。因此,一般来说是需要从市场、政策、经济、技术、人员等各方面因素来分析这个系统项目开发的可实行性[3]。而在软件领域的可行性分析一般至少从下述三个方面研究其可行性:技术可行性分析、经济可行性分析、操作可行性分析[4]。

        技术可行性分析:Android系统是基于Java或Kotlin编写的,同时,在开发时可以选择Android Studio配上Android SDK或连接真机操作,完全可以实现系统功能,加上开发者本身具有的Java功底,以及Android的开放性,有许多开放性代码可以参考和学习,实现权限调动、信号发射等技术是可行的。对于测试接收端,利用Arduino可以实现代码的自由编写,达到与软件配对控制的效果,而Arduino的编程语言也十分简单,具有C/C++语言功底的人完全能编写得出来,因此在这方面也是具有可行性的。

        经济可行性分析:从成本方面看,系统的实现,计算机和网络硬件已经拥有。由于Android是个开放的平台,Android Studio与Android SDK都是免费提供的,而接收端的Arduino也是免费提供的,现实设备也仅仅百来块,因此成本很低;从效益方面看,控制开关主要是为无线自发电照明灯开关添加手机控制的空白,暂时还不会带来任何经济收益,不过经过完善后,当无线自发电照明灯开关开始进入市场,作为辅助性的红外蓝牙一体化开关也可以为其添加动力,一旦在社会上推广,加上Android系统的广泛应用,相信会有很大的盈利空间。因此,从这两方面来看也是可行的。

        操作可行性分析:开发人员有着多语言开发的功底,对C#、Java、Python等都有所涉及,建立在这些语言上的应用开发对开发人员来说,无论是学习还是应用都不是很困难,加上指导老师的悉心教导完全可以胜任此次开发。由于此系统开发并不是以盈利为目的,开发周期可以相对较长,因此对于开发人员的要求不是很高,具有一定开发能力的开发人员即可。从法律角度看,Android Studio、Arduino等平台是个开放平台,加上基于Android的红外蓝牙一体化开关主要是辅助无线自发电照明灯开关在互联网上的控制,作为毕业设计,自主开发,不收取任何开发费用,具有学习等性质,因此不会在社会上引起侵权或其它责任问题。因此,在开发的操作上也是可行的。

2.2 开发工具介绍

        Android及SDK介绍:SDK指的是软件开发包,是软件开发工程师用来为特定硬件开发软件的软件开发平台和应用程序包的集合。因此,Android SDK是Android专属的软件开发工具包。

        Android Studio简介:Android Studio是Google推出的Android应用开发集成开发环境(IDE),它提供了很多提高Android应用的构建框架,使得开发人员的工作效率大大提升,类似 Eclipse ADT,Android Studio 还提供了一系列的模拟机测试,可进行真机调试也可模拟调试。

        Android Studio用Java语言或Kotlin语言开发,Java对于广大的编程者来说是比较简单的。Android Studio作为Google官方推出的Android开发语言,其功能是十分强大的,有着许多第三方SDK、开源项目,强大的构建系统Gradle,功能强大的布局编辑器,可以拖拉 UI 控件并进行效果预览,广泛应用在手机、平板、可穿戴设备(谷歌眼镜、手表)、TV、自动汽车等app。还有在Android系统权限的调用,Android Studio使用编程语言,可以更好的调用手机中的设置和权限,让app调动变得更见简单。在测试界面上,可以进行真机演示,也可以进行模拟机演示。模拟机的演示只需要选择型号或者去网上寻找相应的包导入后即可,而真机的演示可以直接接入手机后,Android Studio可直接识别。红外蓝牙一体化开关即通过Android Studio连接真机(Redmi Note 8 Pro),匹配Android SDK进行软件的开发。

        Arduino简介:Arduino是开源电子原型平台,它非常便捷灵活,也极易上手,对于非专业的使用人员来说是十分友好的。包含硬件(各种型号的Arduino板)和软件(Arduino IDE)。它构建于开放原始码simple I/O介面版,使用的语言基本与我们熟知的Java、C语言非常相似。它主要有两个部分:硬件部分是可以实现电路的连接,利用Arduino电路板与所需要的模块进行连接就能实现相应的功能;另外一个则是Arduino IDE,你的计算机中的程序开发环境。只要在IDE中输入所需要执行的操作,并将相应的程序烧入到Arduino电路板,通过其芯片实现相应的逻辑关系,最终达到实现功能的效果。有着编程基础的人员来说是十分方便的,加上其本身的语言也十分简单,与C语言最为相似,因此,想要实现自己想要的功能还是十分简单的。

        系统开发时,良好的开发环境是非常重要的,例如硬件配置设计、系统模块结构设计、代码设计等。项目开发环境及技术参数要求如表4.1所示。

表 4.1 项目开发环境及技术参数要求.

名称

项目开发环境及技术参数

操作系统

Windows 10

开发语言

Java

开发工具

Android Studio 2020.3.1.26 Windows版

机带RAM

8.00GB

硬盘存储

137GB(可用11GB)

CPU

Intel(R) Core(TM) i7-8550U

手机模拟机型号

Redmi Note 8 Pro

手机模拟机运行内存

8GB

手机模拟机Android版本

10

接收端开发工具

Arduino 1.8.19 Windows

接收端开发板

UNO-R3官方开发板

蓝牙串口模块

HC-05、JDY-31蓝牙模块、BT18蓝牙模块

红外模块

数字38KHz红外接收头                                                                

3.需求分析

        一个系统的出现必然是因为需求,有了需求系统才会有设计的思路,这样的设计才会有目的,也才会有所作用。首先系统应该具有的一些特性,如易操作、功能简单明了不令人误解、系统运行流畅,功能实现快、系统维护以及更新应方便和简单等。在具有这些基本特性后,满足设计需求必然是无可厚非的,这是必然需要着重考虑的。因此就必须要对系统进行需求分析。

3.1 功能需求分析

        目前,在市面上的控制方式主要有三种:红外线控制、射频控制、蓝牙控制。这三种控制方式,各有各的优势。红外线控制,优点是简单、便捷,无需进行连接直接发射信号。缺点是控制时,发射信号要对向接收端,且中间不能有东西阻挡,容易受到各种热源的影响。蓝牙控制优点是在建立连接后,信号发射稳定,抗干扰能力强,传输能力、穿透能力强,缺点是需要建立稳定的连接。射频控制手机上不易实现,因此不在考虑范围内。考虑到开关需要根据不同情况选择不同的控制方式以及用户需求,因此在设计时,会需要设计红外控制功能、蓝牙控制功能和百度页面搜索功能。

        基于上述的功能需求分析,现从整体上对系统进行业务流程分析。完整的业务逻辑关系能够快速的找到各功能之间的关系,业务流程图就能很好的将系统流程用图像表现出来。进入系统界面,首先显示出三个模块的界面,在界面下面也会有界面的选择,接着对每个模块进行流程分析。红外线界面主要有两方面体现一个是有红外功能调用功能发射红外信号,另一个就是无红外功能的显示。蓝牙界面主要是对蓝牙控制的各个功能之间的判断,以连接和发射为主。第三个模块就是关于百度搜索模块,主要就是进行百度搜索。详细的系统业务流程图如例图3.1所示。

图 3.1 红外蓝牙一体化开关业务流程图图示

(1)红外线控制功能能够调用红外线系统,发射红外线信号。系统通过调用手机端的红外线功能达到发送信号的效果,当接收端接收到红外线信号时,进行一次开关操作。功能如例图3.2。

图 3.2 红外线控制功能与接收端的需求分析E-R图

(2)蓝牙控制功能包括蓝牙扫描功能、蓝牙连接功能、蓝牙操作功能、蓝牙断开功能。它能够调用手机的蓝牙系统,发送控制信号。系统可以通过调用手机端的蓝牙功能,建立手机与接收端的连接,当控制系统发送信号,接收端接收到信号时,进行一次开关操作。功能如例图3.3。

图 3.3 蓝牙控制功能与接收端的需求分析E-R图

(3)百度搜索功能可以给用户提供一个搜索界面,用户可以根据自己的需要在里面进行搜索、查找。功能如例图3.4。

图 3.4 百度搜索功能与用户的需求分析E-R图

3.2 数据流程图

        数据流程图是一种用于描述系统数据流程关系的工具,它可以从复杂的数据独立抽象而出,并且用图像的暗示来阐述信息的来源和实际的流程图,它反应系统必须完成的逻辑功能。从逻辑上进行分析,以图片的形式刻画出运行的先后顺序。对于系统来说,想要实现每一个功能,必然要有一套完整的逻辑系统,而数据流程图就能很好的体现它们之间的变化关系。

(1)红外线控制功能的主要工作集中在设备本身权限的判断和调用上。用户在打开系统时,系统会自动判断移动设备是否有红外线功能,并立马给出弹框反馈,如果有则会提示,否则不做提示直接进行红外线的获取。在获取完成后,等待用户操作。在准备工作结束后,用户就可以通过红外线控制界面的控制按钮进行信号的发射。当用户按下开关,移动设备就会发射红外线信号,当接收端接收到信号后,完成控制。红外线控制功能数据流程图如图3.5。

图 3.5 红外线控制流程图

(2)蓝牙扫描功能是建立蓝牙连接的前提,是整个控制过程最占线程的一部分,也是最消耗时间的一步。在用户选择到蓝牙操作界面后,系统会自动判断手机是否具备蓝牙功能,如果不具备则会提示说明。接着判断蓝牙是否打开,如果还未打开蓝牙则请求打开蓝牙。此时准备部分结束,进入扫描界面,请求手机位置权限。当获得手机的位置权限后,系统进行广播,寻找周边的蓝牙,最后扫描返回已配对和未配对的设备。蓝牙扫描功能数据流程图如图3.6。

图 3.6 蓝牙扫描功能数据流程图

(3)蓝牙连接功能主要是与扫描返回的设备建立连接。扫描界面返回扫描到的设备后,用户根据需求进行连接。此时,系统通过监听操作,当用户点击设备时,表明要与该设备进行连接。由于扫描是占用主要线程,因此要使连接顺利建立,一般需要将扫描停止掉,这样才能把线程释放出来,再进行连接。建立连接后,显示连接信息,跳转蓝牙控制界面。蓝牙连接功能数据流程图如图3.7。

图 3.7 蓝牙连接功能数据流程图

(4)蓝牙操控功能提供蓝牙操控的界面。用户在选择设备并建立连接后,通过控制开关达到控制的效果。用户按下开关,移动设备就会通过已经建立好的连接,发出蓝牙信号,当接收端接收到信号后,完成控制。蓝牙操控功能数据流程图如图3.8。

图 3.8 蓝牙操控功能数据流程图

(5)蓝牙断开功能提供蓝牙的断开操作,当用户不再控制时,可直接点击断开连接按钮,即可完成断开连接操作,此时可重新进行连接,返回选择其他设备进行连接。蓝牙断开功能数据流程图如图3.9。

图 3.9 蓝牙断开功能数据流程图

(6)百度搜索功能提供百度的简单搜索,给用户对于问题的搜索更加方便。百度搜索功能数据流程图如图3.10。

图 3.10 百度搜索功能数据流程图

4.总体设计

4.1 系统整体模块设计

        根据需求分析可以很清晰的看到各个功能模块之间的相互联系和设计思路,这给系统的整体设计提供了非常重要的逻辑支撑,因此在总体设计中就可以可以很快的得到系统的整体模块设计。在系统模块结构设计方面,红外蓝牙一体化开关主要提供红外线控制、蓝牙控制、百度搜索三个功能。其中蓝牙功能分为蓝牙扫描、蓝牙连接、蓝牙操控、蓝牙断开四个功能。将系统分为三个模块:红外线控制模块、蓝牙控制模块、百度搜索模块。如图示4.1。

(1)红外线模块主要实现红外线发射和红外线开关操作两个功能。用户在使用红外线控制模块时,系统首先会判断使用的移动设备是否支持红外线功能,之后才能完整的使用红外线发射和红外线开关操作两个功能。用户可以使用红外线发射功能,通过已支持红外发射的移动设备发射红外信号0xFF38C77D(十六进制),而发射红外信号的方向必须是用户可控的,这样用户才可以根据自己的需求向特定的方向发射信号,从而实现一对多的控制。红外线操控功能则是提供给用户一个红外控制开关,当用户按下开关,设备便会响应红外信号发射事件,发出红外线信号,接收端接收到红外信号时,可以进行一次控制,当再次按下开关时,则会进行一次否操作,即如果当前为关,则按下后则为开。

(2)蓝牙控制模块包含扫描蓝牙功能、蓝牙连接功能、蓝牙操作功能和蓝牙断开功能。蓝牙控制模块同红外控制模块一样,在使用前都需要判断功能是否可用。用户在进入蓝牙控制界面后,需要调用手机自身带有的蓝牙功能,即如果移动设备还没有打开蓝牙,则需要打开蓝牙。蓝牙扫描功能和蓝牙连接功能提供了设备发现和设备连接。用户在使用蓝牙扫描功能时,系统首先要获得手机定位权限(Android 6.0以后使用蓝牙扫描还需要获得位置权限),通过设备扫描,获得配对和未配对的蓝牙设备,在扫描界面返回设备名称和MAC地址后,用户就可以利用连接功能,对用户所需要控制的蓝牙设备进行连接,而这种可选择性的连接方式,提供给用户一对多的选择,也就是说,用户可以根据自己的需求控制开关,实现一对多的控制。蓝牙操作功能与红外线操作功能相似,也是提供给用户一个控制开关,当用户按下开关,设备便会响应蓝牙信号发送事件,通过已连接的蓝牙发出蓝牙信号,接收端接收到蓝牙信号时,可以进行一次控制,当再次按下开关时,则会进行一次否操作。而不同的则是,蓝牙控制中还为用户提供了蓝牙断开功能,因为考虑到用户需要实现一对多的控制,所以想要建立新的蓝牙连接,那么就得将原来的连接断开,这样在返回到上个界面重新选择设备进行连接时,才能正常的建立连接。

(3)百度搜索模块包含百度搜索功能。百度搜索功能是提供百度的简单搜索,为用户的搜索提供了便利。

图 4.1 系统模块层次方框图

        对于系统功能本身来说,在其功能上还是需要满足一些要求的,保证在使用中能按照设计需求来使用。

(1)红外线模块实现发射红外信号到开关接收端,自身检测手机本身是否具有红外线功能。

(2)蓝牙设置模块实现打开本机蓝牙设置面板,查看扫描设备,检查是否打开蓝牙。

(3)打开蓝牙模块实现蓝牙的打开,以及蓝牙权限位置权限的获取。

(4)搜索蓝牙模块实现蓝牙设备的搜索和连接。

(5)蓝牙控制模块实现蓝牙控制开关的功能。

(6)蓝牙断开模块实现蓝牙连接的断开功能。

(7)百度搜索模块实现百度搜索引擎的页面实现,能进行简单的百度搜索。

4.2 红外编码设计与蓝牙通信设计

        在红外技术模块中,需要调用红外发射库,实现发射红外线信号,而发射红外线信号的核心就在transmit()方法(Android ConsumerIrManager提供的一个方法,以pattern为红外开关的时间数组,发送红外信号)的信号编码参数上,编码由“引导码(9ms+4.5ms)+用户编码(高八位)+用户编码(低八位)+键数据码+键数据反码+结束码”组成,然后按照一定的编码规则,合成数组的形式[5]。以NEC6122协议举例,引导码都是固定的(9000+4500),结束码即停止位可以按照(560,2000),不同遥控器差别主要在于用户码和数据码,同一个遥控器的用户码是一样的,不同按键有不同的码值,码值可以转换出对应的数据码和数据反码。

        在红外控制模块中,系统提供已经编辑好的红外编码,并封装好放在Pattern对象中,在需要时只需调用开发者所需要发射的红外编码即可。在Pattern对象中,信号编码按照一定的编码规则,由不同数组的形式存放,以第一种编码方式举例,图4.2示如下。

图 4.2 Pattern类中其中一种编码

        要想发射FF38C77D的红外线信号,需要编辑出对应的数据码,数据码是由引导码+用户码+数据码+数据反码构成,对于计算机来说,它所识别的是二进制,因此还要将其表达为二进制。首先是引导码一般为9000 4500,它表示9ms高电平+4.5ms低电平,在计算机中,560,565,1690这些数组单位均为us,可以通过这个反应出二进制的0,1编码。如“560us,1690us”为1,“560us ,565us”为0。于是编写Android代码的时候,使用“560,1690”表示二进制的1,使用“560,565”表示二进制的0。因此,开发者在想要编辑所需信号时,只需按照0,1规则编辑十六进制数即可。如560,1690, 560,1690, 560,565, 560,565表示为1100,二进制转为十六进制则为字母C。

        相较于红外发射技术,蓝牙通信的实现可能会比较复杂一些。从总体来看,一般的蓝牙通信需要经历扫描、配对、连接、信息交流这几个步骤。通过扫描返回周边蓝牙设备的地址,再进行配对,之后与设备进行连接,最后实现信息交流。从这里可以看出蓝牙功能实现的复杂性,不过也因此,蓝牙通信也存在者很多的优势,如建立连接,使得通信会更加安全。

        蓝牙通信的难点在于扫描和连接。Bluetooth库提供一些方法,虽然不能直接实现,但是也给蓝牙通信的设计带来了极大的便利。

        蓝牙的扫描需要通过广播(BroadcastReceiver)的形式获得,也就是通过扫描获得设备。调用BroadcastReceiver类,将得到的设备与intent.getParcelableExtra()方法比对,返回给显示容器text。

        蓝牙的连接就得需要建立设备之间的通信通道。在这里就需要到前几步得到的mac地址,因为还要对彼此唯一识别,这里就需要设计蓝牙串口通用的UUID(可以在网上查找生成,且不会重复)。在有了这些条件后,就可以利用在上一个返回配对的接口,调用connect()方法进行连接,当然也会有失败的风险,因此也要进行判断,这里可以利用try进行异常判断,这样就能比较好的建立蓝牙连接通信。

4.3 系统功能结构设计

        在总体设计中,为了进一步体现出系统功能间的关系,让关系更加清晰,可以通过结构图将其关系呈现出来。

        从整体来看,设计应分为红外线界面、蓝牙界面、百度界面三个大模块。接下来再根据功能逐一展开。从应用角度来看,这三个模块除了在activity的主模块中有交集,而在实际界面操作时,就完全没有关系,因此在设计fragment界面中,可以单独对任意一个功能进行实现,不用考虑设计的先后顺序。呈现其关系的结构图如4.3所示。

图 4.3 系统界面结构图

        红外线模块包括红外线发射和红外开关操作,发射器作为信号发射,与接收端信息交流,控制开关负责控制供用户使用。模块关系的结构图如4.4所示。

图 4.4 红外线模块结构图

        蓝牙模块包括蓝牙打开功能、蓝牙扫描功能、蓝牙连接功能、蓝牙操作功能、蓝牙断开功能和重新连接功能。这些功能之间都是相互联系的,单独存在意义不大,一般都作为一个整体出现。模块关系的结构图如图4.5所示。

图 4.5蓝牙模块结构图

5.详细设计

5.1主界面设计

        主界面为系统建立三个fragment UI面板,可以在一个activity中实现三个模块的功能。

        主界面布局主要给fragment提供模块的分配和基础样式,在这个基础上建立属于自己所需要的样式。界面如图5.1所示。

图 5.1 activity主界面布局示图

        接着,建立三个fragment界面,分别实现红外线控制、蓝牙控制、搜索三个功能所需要的UI界面,为MainActivity.java 添加导航样式。三个界面布局mobile_navigation.xml,导航的样式可以在Android Studio中选择,也可以添加文字字样,可见bottom_nav_menu.xml代码,样式如图5.2所示。

图 5.2 fragment界面图示

         activity主界面代码设计思路是在建立三个fragment界面后,需要将它们与activity连接起来,这样才能实现一个activity对应多个UI界面。同时还需要有一个导航的功能,通过底层的导航就可以选择到其他的UI界面,并实现它们之间的来回切换。而MainActivity.java主要实现这些功能,这部分可由activity直接生成,也可开发者自己编写。

5.2 红外线模块

        系统想要调用红外线,需要先获得移动设备的红外线权限,这样在检测、操作红外线功能时才能调用移动设备的权限,否则会报出错误。想要获得权限,开发者需要在AndroidManifest.xml添加权限,在这里可以通过<ses-permission android:name="…"/>添加相应权限功能,其中红外控制权限可添加

"android.permission.BLUETOOTH_ADVERTISE""android.permission.BLUETOOTH_CONNECT"

,判断是否支持红外运行,可添加

"android.permission.BLUETOOTH_SCAN"、"android.permission.TRANSMIT_IR"。

        红外线控制界面主要实现开关控制的功能,所以界面布局会比较简单,添加背景图片和一个控制开关,开关按钮在被点击后改变样式。界面布局layout代码存储在fragment_home.xml,样式如图5.3所示。

图 5.3 红外线控制界面布局示图

        要实现红外线模块,首先使用的移动设备需要有红外线功能,因此在使用红外线模块时,需要先检测移动设备是否具有红外线功能,如移动设备不具有红外线功能则传递提示错误信息,由当前界面Toast出错误提示,如图5.4所示,若具有红外线功能,则不弹出提示。首先红外线功能的判断需要在红外线模块的fragment建立时就需要进行判断,因此需要重写onCreate方法,将判断语句添加到onCreate。代码如下所示,首先因为在fragment界面,它不具有activity的方法,因此需要将activity的方法给实例化,这样就可以使用activity中Toast方法,接着判断Android的版本,当版本小于一定的版本是必然不具备红外线功能的,最后在利用hasIrEmitter函数判断是否具有红外线功能,具有则非空,否则返回false。

//调用主Activity的方法函数。

MainActivity act = (MainActivity) getActivity();

//判断Android手机的系统是否支持红外传输,即确定Android版本。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

//实例化

service=(ConsumerIrManager)act.getSystemService(Context.CONSUMER_IR_SERVICE);

//判断手机是否有红外功能,如没有则会弹出提示,表明当前手机不支持红外遥控。

if (!service.hasIrEmitter()){

Toast.makeText(getActivity(), "当前手机不支持红外遥控", Toast.LENGTH_LONG).show();}
图 5.4 界面Toast出错误提示

        红外线控制功能在获得权限后,接下来就是红外信号的发射。在界面中需要添加一个按钮开关,当按下开关,红外信号从移动端发射,按钮开关颜色变化,表示完成了一次红外信号发射,如图5.5所示。核心代码设计如下,首先调用红外线服务,将类实例化,在与界面布局的按钮建立连接,然后再编辑它的响应事件,在事件中,从Pattern类中选择开发者所需要发射编码,利用发送红外信号transmit方法,当按下开关就完成一次发射,开关颜色改变。

//红外线服务实例化

service=(ConsumerIrManager)act.getSystemService(Context.CONSUMER_IR_SERVICE);

//使fragment与Button建立连接。

mBnt_1 = root.findViewById(R.id.text_home);

//按钮响应事件

mBnt_1.setOnClickListener(new View.OnClickListener() {

@Override

//设置按钮样式改变的标记,flag

public void onClick(View view) {

switch (flag) {

case 0:mBnt_1.setBackgroundResource(R.drawable.button2);

flag = 1;break;

case 1:mBnt_1.setBackgroundResource(R.drawable.button1);

flag = 0;break;}

//选择第一种编码发送。

Pt.Transmission = 1;

pattern = Pt.Pattern();

//发送红外信号transmit方法

service.transmit(38400, pattern);}});
图 5.5 红外线控制开关变化

5.3 蓝牙控制模块

        系统想要调用蓝牙,需要先获得移动设备的蓝牙权限,这样在打开蓝牙、发现蓝牙和连接蓝牙时才能调用移动设备的权限。在扫描蓝牙的过程中,对于Android 6.0以上的安卓系统,需要打开移动设备的位置定位权限,这样才能在扫描中得到蓝牙的位置,返回到扫描界面。蓝牙权限和位置权限都需要开发者获取,如果在使用时,没有获得这些权限,系统将无法达到控制的效果。想要获得权限,开发者需要在AndroidManifest.xml添加权限,在这里可以通过

<ses-permission android:name="…"/>

添加相应权限功能,其中添加蓝牙控制权限可添加

"android.hardware.ConsumerIrManager" android:required="true"

启动设备发现权限添加"android.permission.BLUETOOTH",获得位置权限添加

"android.permission.ACCESS_FINE_LOCATION""android.permission.ACCESS_COARSE_LOCATION"。

        打开蓝牙功能的页面布局,主要看功能的需求。对于打开蓝牙功能来说,它是蓝牙控制的准备工作,在这个布局中,可以做一些适当的说明和一些提示,但最主要的还是要实现相应的功能,因此,在布局中添加了三个按钮。第一个是打开蓝牙按钮。目的是让用户打开蓝牙。第二个是蓝牙设置按钮。目的是在当前界面无法操作的情况下,可以打开移动设备的蓝牙界面,利用本机蓝牙界面进行操作。第三个是开始操作按钮。目的是在完整一系列准备工作后,即完成蓝牙打开的工作后,就可以进入蓝牙扫描界面,进行蓝牙控制的下一步操作。界面布局layout代码存储在fragment_dashboard.xml,样式如图5.6所示。

图 5.6 打开蓝牙功能界面布局图示

        蓝牙模块与红外模块一样,在使用其功能时,首先要确定移动设备是否有模块功能,因此,开发者要使用蓝牙功能时,需要先检测移动设备是否具有蓝牙功能,如移动设备不具有蓝牙功能则传递提示错误信息,由当前界面Toast出错误提示,如图5.7所示,若具有蓝牙功能,则不弹出提示。首先蓝牙的判断需要在蓝牙模块的fragment建立时就需要进行判断,因此需要重写onCreate方法,将判断语句添加到onCreate,在这里,将判断作为一个单独的方法呈现,在onCreate中调用即可。代码如下所示。

//判断手机是否有蓝牙功能,如没有则会弹出提示,表明当前手机不支持蓝牙遥控。

private void initInfrared2(){mBtA = BluetoothAdapter.getDefaultAdapter();

if (mBtA == null){Toast.makeText(getActivity(), "当前手机不支持蓝牙遥控", Toast.LENGTH_LONG).show();}}
图 5.7 界面Toast出错误提示

        打开蓝牙功能主要是为之后蓝牙的扫描,和蓝牙的控制做准备工作。在界面中添加的三个按钮都有相应的功能和目的。

        (1)打开蓝牙按钮。目的是让用户打开蓝牙。代码设计如下,首先对控件进行连接,接着编辑控件的响应事件。首先进行蓝牙打开情况进行判断,如果蓝牙已打开则Toast出"蓝牙已打开",否则会请求打开蓝牙,如图5.8所示。

lBnt_4 = root.findViewById(R.id.Bnt_Bluetooth4);

//蓝牙权限判定

lBnt_4.setOnClickListener(new View.OnClickListener() {

public void onClick(View view) {if (mBtA.isEnabled()) {

//蓝牙已打开

Toast.makeText(getActivity(), "蓝牙已打开", Toast.LENGTH_SHORT).show();} else {Toast.makeText(getActivity(), "打开蓝牙", Toast.LENGTH_SHORT).show();startActivityForResult(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE),REQUEST_ENABLE_BLUETOOTH);}}});
图 5.8 打开蓝牙控件响应事件示图

        (2)蓝牙设置按钮。目的是在当前界面无法操作的情况下,可以打开移动设备的蓝牙界面,利用本机蓝牙界面进行操作。代码设计如下,首先对控件进行连接,接着编辑控件的响应事件。对当前蓝牙打开情况进行判断,如果还没有打开蓝牙则会请求打开蓝牙,反之直接进入蓝牙设置界面,如图5.9所示。

lBnt_3 = root.findViewById(R.id.Bnt_Bluetooth1);

//打开蓝牙设置

lBnt_3.setOnClickListener(new View.OnClickListener() {

public void onClick(View view) {if(mBtA.isEnabled()){//打开设备的蓝牙设置界面

Intent tIntent = new Intent(android.provider.Settings.ACTION_BLUETOOTH_SETTINGS);

startActivity(tIntent);

}else {Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

//发出请求,打开蓝牙

startActivityForResult(intent, REQUEST_ENABLE_BT);}}});
图 5.9 蓝牙设置按钮响应事件示图

        (3)开始操作按钮。在完整一系列准备工作后,即完成蓝牙打开的工作后,就可以进入蓝牙扫描界面,进行蓝牙控制的下一步操作。代码设计如下,首先对控件进行连接,接着编辑控件的响应事件。按钮实现页面的跳转,从当前Fragment界面跳转到Bluetooth_main_Activity.java,如果已经打开蓝牙,则直接跳转界面,如图5.10所示。

lBnt_send = root.findViewById(R.id.text_dashboard);

//开始操作按钮

lBnt_send.setOnClickListener(new View.OnClickListener() {

public void onClick(View view) {

//页面的跳转,从当前Fragment界面跳转到Bluetooth_main_Activity

Intent intent = new Intent(getActivity(),Bluetooth_main_Activity.class);

//实现跳转

startActivity(intent);}});
图 5.10 开始操作按钮跳转页面

         扫描蓝牙功能所需要实现的功能主要有几个方面。一是已配对和未配对设备的显示。二是搜索按钮的实现。三是搜索情况的友好反馈。四是监听用户操作,与设备进行配对或者连接。因此可以设计为三个部分,第一个为已配对部分,第二个为未配对部分,这两个部分可以用TextView添加。第三部分就是搜索按钮和搜索情的显示。界面布局layout代码存储在activity_bluetooth_main.xml,样式如图5.11所示。

图 5.11 扫描蓝牙功能界面布局示图

        为了保险起见,一般在跳转另一个界面或者实现一个按钮,在蓝牙模块中,都做一次蓝牙是否打开的判断,这样就能保证系统的正常运行,因此在扫描蓝牙功能中,首先在界面创建时就立马进行判断,如果没用打开蓝牙直接向用户发起请求,如图5.12。在解决蓝牙权限问题后,就是位置权限的请求。对于Android 6.0及以上的Android设备来说,要扫描到蓝牙设备必须还要获得移动设备的位置权限,这样在扫描时才能正常返回出设备信息。因此,在界面从上个界面跳转到扫描蓝牙界面时,就立马进行请求。添加权限、请求位置权限代码如下所示。

private final int ACCESS_LOCATION = 1;

@SuppressLint("WrongConstant")

private void getPermission() {

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {

int permissionCheck = 0;

permissionCheck = this.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION);

permissionCheck += this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION);

if (permissionCheck != PackageManager.PERMISSION_GRANTED) {

//未获得权限

this.requestPermissions( // 请求授权

new String[]{Manifest.permission.ACCESS_FINE_LOCATION,

Manifest.permission.ACCESS_COARSE_LOCATION},

ACCESS_LOCATION);// 自定义常量,任意整型

}

}

}
图 5.12 扫描界面请求定位权限

对于蓝牙扫描功能的代码设计,可分为三个部分进行实现。

        (1)已配对、未配对蓝牙设备。因为已配对和未配对的实现方式非常相似,而且需要很多共用的方法函数,所以可以将这两个功能同时实现,如图5.13。首先建立与textView控件的连接,以及对蓝牙类的实例化,在Android Studio中,有很多蓝牙调用的函数提供开发者使用。

text = findViewById(R.id.textView);

text3 = this.findViewById(R.id.textView3); //未配对

//蓝牙实例化

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

接着是定义广播接收,这一部分是扫描返回设备的关键,通过调用自建的BroadcastReceiver类,实现蓝牙扫描和接收,然后返回,返回到device中,然后按照一定的格式写到text中,通过textView控件展示给用户。以下是广播接收的代码实现。

if (action.equals(BluetoothDevice.ACTION_FOUND)) {

device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

if (device.getBondState() == BluetoothDevice.BOND_BONDED) {

//在已配对下面显示已配对设备

text.append("\n" + "设备:" + device.getName() + "\t" + "MAC地址:" + device.getAddress() + "\n");

} else if (device.getBondState() != BluetoothDevice.BOND_BONDED) {

//搜索到的,还没有配对的设备,添加到还未配对的textView中

text3.append("\n" + "设备:" + device.getName() + "\t" + "MAC地址:" + device.getAddress() + "\n");

} else if (action.equals(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)) {

//扫描完成,返回结束,界面友好提示

text2.setText("搜索完成...");}}
图 5.13 已配对、未配对设备显示

        (2)搜索蓝牙与搜索情况提示。这部分,可以利用Button控件和TextView控件实现。搜索蓝牙,需在控件中编辑控件的点击事件。而搜索情况提示与搜索按钮的控件是连接的,当Button控件点击时,就改变初始的TextView,显示正在搜索字样。代码实现如下。

button.setOnClickListener(new View.OnClickListener() {

public void onClick(View view) {

//textView返回长在搜索字样

text2.setText("正在搜索...");}});

        (3)设备配对与连接。设备的配对与连接目的是通过点击返回的设备,进行配对或者连接操作,如图5.14。当设备已经完成配对,那么用户点击已配对设备则会直接跳转到连接界面,然后进行控制操作,而蓝牙的连接在进入控制界面时会自动进行连接,因此,其核心是,通过点击设备进行页面添跳转。以下是点击事件的代码实现。

text.setOnClickListener(new View.OnClickListener() {

public void onClick(View view) {

//获得设备的Mac地址,并将结果赋给变量a

String a = device.getAddress();

//实现页面的跳转,从当前页面跳转到BluetoothActivity控制界面

Intent intent = new Intent(Bluetooth_main_Activity.this, BluetoothActivity.class);

//Bundle打包数据,此处是Bundle实例化

Bundle bundle = new Bundle();

//key:mac   date:a

bundle.putString("mac", a);

//把附加的数据放到意图当中,并发送

intent.putExtras(bundle);

//执行意图,并实现界面的跳转

startActivity(intent);

}});
图 5.14 接收端和发射端蓝牙设备连接示图

        蓝牙操作功能和蓝牙断开功能是在扫描结束后进行的,主要的作用就是控制开关。因此,在布局中也会比较简单、明了,添加三个Button按钮实现断开、重连、控制三个功能,最后再添加一个textView作为控制界面的信息反馈。界面布局layout代码存储在activity_bluetooth.xml,样式如图5.15所示。

图 5.15 蓝牙操作与蓝牙断开功能页面布局图示

        通过蓝牙操控界面,用户就可以实现与接收端连接,达到控制的效果,与红外线控制模块相似,在功能上要有一个控制开关,当开关按下时就会发射一次信号。而与红外线控制不同的是,蓝牙控制添加了断开和重新连接的操作,以及控制情况的反馈。

        连接、控制反馈功能,在界面中,系统在控制界面中会反馈当前的连接情况以及控制情况。这个效果的实现可以用TextView控件来实现,当跳转到控制界面时,界面返回“正在进行连接,请稍后”,当完成连接时,显示“连接成功”,在发射信号时,显示“控制中”,在断开连接时,显示“断开连接”,如图5.16。开发者只需将文字添加到程序进行到的步骤中返回即可,如页面从扫描界面跳转到控制界面时,此时系统在与接收端的蓝牙进行连接,这时就可以利用reture返回文字,在利用setText方法传入TextView中,这样文字就会根据当先进程反馈进程情况。

图 5.16 连接、控制等反馈功能示图

        连接和断开连接功能,通过按钮的点击事件可以进行干涉。扫描页面跳转到控制界面时,由上一页面传输来的mac地址,通过当前界面的接口接收,蓝牙的连接需要有一个唯一的标识,在这里可以利用蓝牙串口通用的UUID进行唯一标识。连接时onPostExecute方法要在主线程中运行的,所以在跳转页面时,还有非常重要的一步,就是需要将原来的广播关闭掉,这样才能释放线程,蓝牙才能正常进入连接。为了确保在连接出现错误或者失败时,程序能正常运行,在连接时一般利用try做异常处理,这样当出现错误时,可以进行及时反馈,又能保证系统正常运行。以下是主要连接代码。

//try异常处理

try {//UUID唯一标识

btSocket = device.createRfcommSocketToServiceRecord(MY_UUID);

//连接

btSocket.connect();} catch (IOException e) {

//异常处理

try {btSocket.close();return "Socket 创建失败";

} catch (IOException e2) {return "Socket 关闭失败";}}

//取消搜索

mBluetoothAdapter.cancelDiscovery();

//异常处理

try { outStream = btSocket.getOutputStream();

} catch (IOException e) {

return "连接失败";}

return "蓝牙连接正常";}

对于断开按钮来说,只要实现在已有连接的情况将btSocket关闭,即原本建立的连接关闭,那么连接将会自动断开,如图5.17。因此,断开连接按钮的点击事件可以以这个方向进行考虑。首先可以进行判断,如果连接没能建立成功,则直接返回断开连接,否则尝试断开连接的操作,关闭btSocket,重新创建一个新的btSocket,此为空值,为了下次连接做准备。代码如下。

//断开连接

btnQuit.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

if (btSocket != null) {

try {  btSocket.close();  btSocket = null;

statusLabel.setText("当前连接已断开");

} catch (IOException e) {

e.printStackTrace();}}}});

图 5.17 设备蓝牙断开连接示图

        蓝牙控制功能是控制蓝牙信号发射的按钮,在建立连接后,按下按钮就会发出一次信号,实现控制的效果,其作用与红外线开关相似,如图5.18。首先控制问题,在Arduino中,编辑的控制模块是当控制端发射一次蓝牙信号就可以完成一次控制,因此在点击事件中,只需完成单击一次完成一次信号发射即可。发射事件可以建立一个发送数据的类SendInfoTask,这样在点击事件中,只需引用SendInfoTask的方法进行发送即可。

        接着编辑点击事件完成点击发送数据和改变按钮样式实现控制一次变化的样式。以下是点击事件代码。

btnSend.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {new SendInfoTask().execute("999");

switch (flag) {case 0:  btnSend.setBackgroundResource(R.drawable.button2);

flag = 1; break;

case 1:  btnSend.setBackgroundResource(R.drawable.button1);

flag = 0; break;}}});

图 5.18 蓝牙控制功能开关控制变化示图

5.4 百度搜索模块

        百度搜索模块需要调用百度界面(https://baidu.com/),要想收到界面必然要有网络的支持,因此,系统必须要得到移动设备的网络权限,这样才能正常把界面加载出来。想要获得权限,开发者需要在AndroidManifest.xml添加权限,在这里可以通过<ses-permission android:name="…"/>添加相应权限功能,其中获得网络权限可添加"android.permission.INTERNET"。

        百度搜索界面目的是将百度界面加载在移动设备界面上,因此界面布局十分简单。只需要在布局中添加WebView控件,将控件范围设置完整个fragment界面,然后在加载百度界面,简单来说就是设置一个容器,然后将网页放入这个容器中,如图5.19。界面布局layout代码存储在fragment_notifications.xml,样式如图所示。

图 5.19 百度搜索界面WebView框架

        百度搜索界面的加载是比较简单的,效果如图5.20所示。只需要三步,首先进行WebView控件的连接,接着请求网络连接最后输入加载网址,界面就会加载在fragment界面上。以下实现代码。

//百度控件。

mWebView = root.findViewById(R.id.baidu);

//请求网络连接。

mWebView.getSettings().setJavaScriptEnabled(true);

mWebView.setWebViewClient(new MyBaiDuWebView());

//百度地址。

mWebView.loadUrl("https://baidu.com/");

图 5.20 百度搜索功能搜索界面演示

6.接收端测试

        这里的测试主要说明的是接收端接收到信号的测试情况,即当系统发送信号,接收端接收到信号的变化情况,是否能达到所需效果。因此,这里面对的主要是发送、接收信号的测试。

        测试的接收端使用Arduino UNO、红外线接收模块、蓝牙HC-05模块进行。测试主要是检测当系统按下控制按钮时,连接在端口11的小灯是否能进行控制,分为红外线控制检测、蓝牙控制检测两个部分。

        接收端Arduino代码设计上,在接收端,需要编辑Arduino代码以实现接收信号,控制的效果。代码的原理也十分简单,当模块接收到信号时,灯亮,再接收到信号时,灯灭。

if (digitalRead(11) == HIGH) {

      digitalWrite(11, LOW);  //关闭LED指令

    } else {

      digitalWrite(11, HIGH);  //点亮LED指令

    }

        如图6.1,当按下按钮,系统发射红外线信号,Arduino板的红外线接收模块接收到红外线信号后,对灯进行一次控制,当再按下一次开关则灯又会改变一次状态。

图 6.1 红外线控制小灯测试

                如图6.2,当按下按钮,系统发射蓝牙信号,Arduino板的HC-05蓝牙模块接收到蓝牙信号后,对灯进行一次控制,当再按下一次开关则灯又会改变一次状态。

图 6.2 蓝牙控制小灯测试

        通过对本系统进行的多次的测试,系统能非常准确的完成各项功能,现场设备情况稳定,基本满足了用户对系统功能的操作需求。在测试过程中,系统运行稳定,对于一些出现逻辑错误的代码程序也进行了补充修改,整体效果与预期效果保持一致,运行结果比较良好。

 

图 6.1 红外线控制小灯测试

        如图6.2,当按下按钮,系统发射蓝牙信号,Arduino板的HC-05蓝牙模块接收到蓝牙信号后,对灯进行一次控制,当再按下一次开关则灯又会改变一次状态。

图 6.2 蓝牙控制小灯测试

        通过对本系统进行的多次的测试,系统能非常准确的完成各项功能,现场设备情况稳定,基本满足了用户对系统功能的操作需求。在测试过程中,系统运行稳定,对于一些出现逻辑错误的代码程序也进行了补充修改,整体效果与预期效果保持一致,运行结果比较良好。

 

7.总结

        红外蓝牙一体化开关已经基本实现了预期的功能,达到了系统控制的基本要求。用户可以通过红外线控制、蓝牙控制两种控制方式对灯进行控制,并且是可以实现一对多的控制,因此在这方面还是比较符合预期要求的。不过由于技术水平有限,可能系统仍然存在着不完善的地方,在整个工程的结构以及各个功能模块之间的关系还存在着不足,相关关系可能还存在一些不合理,这些问题需要在日后不断进行完善。同时,系统还有进一步扩展的空间,相信在未来能够给用户更好的体验和生活的便捷。

 

参考文献

  1. 艾媒网《手机行业数据分析:2021年中国网民智能手机操作系统为安卓的占比89.6% 》.(2021-08-03)[2022-02-27] 手机行业数据分析:2021年中国网民智能手机操作系统为安卓的占比89.6%-艾媒网.
  2. 华清远见 《Android开发平台五大优势》技术文章[2022-03-09] Android开发平台五大优势--华清远见嵌入式培训中心
  3. 田志颖. 基于Android的移动学习软件设计与实现[D].曲阜师范大学,2016.
  4. 张海藩.软件工程导论.清华大学出版社,1900:18-124.
  5. Huangrong_000《红外遥控及Android手机红外遥控器开发》.( 2019-08-09)[2022-02-27] 红外遥控及Android手机红外遥控器开发_Huangrong_000的博客-CSDN博客_android遥控器开发
  6. 余志龙 郑名杰等.Google.Android.SDK开发范例大全.北京:人民邮电出版社,2009年:1~238
  7. 李宁.Android开发权威指南.北京:机械工业出版社.2011年.
  8. Kathy Sierra,Bert Bates著/杨尊一编译 张然等改编. Head First Java(第二版·中文版). 中国电力出版社,2008.
  9. 刘镇钥. 基于安卓平台的无线语音通信系统设计与实现[D].山东大学,2021.DOI:10.27272/d.cnki.gshdu.2021.004446.
  10. 朴勇. 软件工程实用教程[M].人民邮电出版社: 201508.264.
  11. Jackie的储物袋《软件项目开发基本流程详解》.( 2018-03-15)[2022-02-27] 软件项目开发基本流程详解_Jackie的储物袋的博客-CSDN博客_开发软件的基本流程
  12. Android 开发者.蓝牙开发. 蓝牙概览  |  Android 开发者  |  Android Developers
  13. 张文哲.基于安卓系统的教学管理平台开发[J].江苏科技信息,2018,35(34):50-52.2

致  谢

        本人能够比较顺利的完成该次毕业设计,离不开***的悉心指导。两位不但在技术方面给予了指点,还在编程思想以及学习方法等方面给予了指导,使我在毕业设计的过程中有了专业技能和综合能力的提高。也要感谢身边的同学、朋友们对系统所提的建议与意见,使我对毕业设计的流程有了更加全面和完善的认识。最后还要感谢组织毕业设计的老师们,没有你们的辛勤付出,就没有毕业设计的顺利成功的进行。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐