日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

本科毕业论文-软件开发类-《基于Android端开关控制系统的设计与实现》-论文模板

發(fā)布時(shí)間:2023/12/15 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 本科毕业论文-软件开发类-《基于Android端开关控制系统的设计与实现》-论文模板 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

前言

一、任務(wù)書

二、目錄

三、論文正文

摘要

ABSTRACT

1.引言

2.系統(tǒng)開發(fā)環(huán)境

2.1可行性分析

2.2 開發(fā)工具介紹

3.需求分析

3.1 功能需求分析

3.2 數(shù)據(jù)流程圖

4.總體設(shè)計(jì)

4.1 系統(tǒng)整體模塊設(shè)計(jì)

4.2 紅外編碼設(shè)計(jì)與藍(lán)牙通信設(shè)計(jì)

4.3 系統(tǒng)功能結(jié)構(gòu)設(shè)計(jì)

5.詳細(xì)設(shè)計(jì)

5.1主界面設(shè)計(jì)

5.2 紅外線模塊

5.3 藍(lán)牙控制模塊

6.接收端測試

7.總結(jié)

參考文獻(xiàn)

致? 謝


?前言

????????又到了一年的畢業(yè)季,苦逼的大學(xué)畢業(yè)生們也要開始決定自己未來的走向,但無論是要去考研考公,還是出去找地方做社畜,目前還有一個(gè)最大的難關(guān),就是畢業(yè)論文。本人很幸運(yùn)被老師選中做一個(gè)簡單的手機(jī)APP,作為支撐項(xiàng)目,因此也準(zhǔn)備了非常久,開發(fā)加撰寫,以及不斷修改足足花了大半年時(shí)間(新年依舊是碼農(nóng)),本來還以為結(jié)束了,突然被抽到外審,又改了好久。(因?yàn)榇a固定格式的原因,所以查重率很高,和老師反應(yīng)是否可以用圖片,老師處于嚴(yán)謹(jǐn)pass掉了,沒辦法修改和刪除部分代碼了,又苦逼了好久)
????????因?yàn)楫?dāng)初自己花了很多時(shí)間搜索材料,以及模板,有時(shí)常會(huì)感到資料的匱乏,模板的缺少,因此,將我的設(shè)計(jì)公開給大家參考,希望能幫助到大家。
????????最后非常感謝我的導(dǎo)師給出的指導(dǎo)建議和修改建議,讓我完成了這篇完美的論文(對我來說非常不錯(cuò),哈哈),以及幫助我開發(fā)arduino的學(xué)長,非常感謝!!!

接下來,我將把主要內(nèi)容展示出來,供大家參考。
完整主論文資源,參考:
附件:

?一、任務(wù)書

課題名稱基于Android端開關(guān)控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

一、主要內(nèi)容

????????本文主要研究了一種基于Android端的無線開關(guān)控制系統(tǒng)。通過對現(xiàn)有開關(guān)控制方式的需求分析,設(shè)計(jì)出了一款基于Android端的紅外藍(lán)牙一體化開關(guān)系統(tǒng),該系統(tǒng)主要有三大模塊,紅外線控制模塊、藍(lán)牙控制模塊和百度搜索模塊。該系統(tǒng)可以實(shí)現(xiàn)對照明燈開關(guān)的遠(yuǎn)程智能控制、操作簡單、方便實(shí)用,實(shí)現(xiàn)一對多控制、多種控制方式并存的優(yōu)勢。

二、基本要求

????????1.查閱與本論文相關(guān)的書籍文獻(xiàn)資料。

????????2.論文格式按照要求規(guī)范化撰寫。

????????3.文字表達(dá)通順,結(jié)構(gòu)邏輯合理。

? ????????4.程序完整,能夠正常運(yùn)行且能實(shí)現(xiàn)相應(yīng)功能。

三、論文(設(shè)計(jì))工作起始日期

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

四、進(jìn)度與應(yīng)完成的工作

第一階段:閱讀書籍、查找資料 (2021 11 月 15 日—2021 年 12 月 31 日)

第二階段:系統(tǒng)設(shè)計(jì)、論文初稿 ?(2022 1 月 1 日—2022 3 月 10 日)

第三階段:論文修改及電子檔送檢(2022 3 月 11 日—2022 3 月 20 日)

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

?第五階段:論文答辯準(zhǔn)備及答辯? (2022 4 月 16 日—2022 4 月 29 日)

五、主要參考文獻(xiàn)、資料

[1]?? 艾媒網(wǎng)《手機(jī)行業(yè)數(shù)據(jù)分析:2021年中國網(wǎng)民智能手機(jī)操作系統(tǒng)為安卓的占比89.6% 》.(2021-08-03)[2022-02-27]

[2]?? 華清遠(yuǎn)見 《Android開發(fā)平臺五大優(yōu)勢》技術(shù)文章[2022-03-09]

[3]?? 田志穎. 基于Android的移動(dòng)學(xué)習(xí)軟件設(shè)計(jì)與實(shí)現(xiàn)[D].曲阜師范大學(xué),2016.

? [4] 張海藩.軟件工程導(dǎo)論.清華大學(xué)出版社,1900:18-124.

二、目錄

?

...

三、論文正文

基于Android端開關(guān)控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

摘要

隨著物聯(lián)網(wǎng)的快速發(fā)展,萬物互聯(lián)已成為未來發(fā)展的總趨勢。為了實(shí)現(xiàn)對無線自發(fā)電照明燈開關(guān)的方便控制,本文主要研究了一種基于Android端的無線開關(guān)控制系統(tǒng)。通過對現(xiàn)有開關(guān)控制方式的需求分析,設(shè)計(jì)出了一款基于Android端的紅外藍(lán)牙一體化開關(guān)系統(tǒng),該系統(tǒng)主要有三大模塊,紅外線控制模塊、藍(lán)牙控制模塊和百度搜索模塊。在系統(tǒng)開發(fā)中,主要使用Java作為開發(fā)語言,通過Android Studio開發(fā)平臺對發(fā)射端的紅外線功能和藍(lán)牙功能進(jìn)行設(shè)計(jì)和編程實(shí)現(xiàn),通過arduino開發(fā)平臺對接收端進(jìn)行信號處理和設(shè)備調(diào)試。在測試中,利用Android Studio開發(fā)平臺連接到Redmi Note 8 Pro進(jìn)行真機(jī)運(yùn)行,實(shí)現(xiàn)開關(guān)控制系統(tǒng)中的紅外線控制功能、藍(lán)牙控制功能和百度搜索功能。該系統(tǒng)可以方便實(shí)現(xiàn)對照明燈開關(guān)的遠(yuǎn)程智能控制、操作簡單、方便實(shí)用,實(shí)現(xiàn)一對多控制或與多種控制方式并存的優(yōu)勢。

關(guān)鍵字:Android;紅外線控制;藍(lán)牙控制;物聯(lián)網(wǎng)控制;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.引言

????????隨著科技的發(fā)展,各類電子產(chǎn)品層出不窮,手機(jī)的普及更是給人們的日常生活增添了諸多便利。現(xiàn)如今,手機(jī)基本是每個(gè)人生活的必需品,人手一部手機(jī)基本成為現(xiàn)實(shí),智能手機(jī)市場不斷擴(kuò)大。從2021年中國網(wǎng)民智能手機(jī)操作系統(tǒng)使用比例來看,Android系統(tǒng)仍然占據(jù)半壁江山,使用比例將近九成[1],而其成為主流的主要原因是Android系統(tǒng)以其開放的平臺、眾多的免費(fèi)應(yīng)用、華麗新穎的操作界面、簡單友好的用戶體驗(yàn)。而對于開發(fā)者而言,Android開發(fā)平臺具有多種開發(fā)優(yōu)勢[2]。一是開放性。開放的平臺允許任何移動(dòng)終端廠商加入到Android中來,使得其有更多的開發(fā)者,隨著用戶和應(yīng)用的日益豐富,Android開發(fā)平臺也會(huì)更加成熟,多種插件和應(yīng)用庫也會(huì)給開發(fā)者帶來非常大的便利。二是豐富的硬件選擇。 由于Android的開放性,開發(fā)者可以根據(jù)自己的需要來設(shè)計(jì)軟件系統(tǒng),得到各式各樣的特色軟件。而功能的差異和特性,既不會(huì)影響軟件的兼容性和數(shù)據(jù)同步。第三是Google應(yīng)用程序的無縫組合。如今Google成立已經(jīng)有二十多年的歷史,從單純的搜索到全面的互聯(lián)網(wǎng)滲透,Google服務(wù)早已經(jīng)成為連接用戶和互聯(lián)網(wǎng)的重要部分,作為Google推薦的官方發(fā)開平臺,Android平臺將無縫結(jié)合Google服務(wù)。Android應(yīng)用的需求勢必會(huì)越來越大,這是一個(gè)潛力巨大的市場。

????????近年來,物聯(lián)網(wǎng)迅速發(fā)展,萬物互聯(lián)已然是大勢所趨,無線控制、智能家居等物聯(lián)網(wǎng)控制紛紛成為現(xiàn)實(shí)。在現(xiàn)實(shí)生活中,實(shí)物開關(guān)的控制是很普遍的,但是隨著時(shí)代的發(fā)展,用戶不僅僅需要通過現(xiàn)實(shí)開關(guān)進(jìn)行控制,還需要使用手機(jī)達(dá)到控制的效果,既能實(shí)現(xiàn)正常的開關(guān)控制,也能使用手機(jī)控制。現(xiàn)有一款無線自發(fā)電照明燈開關(guān)項(xiàng)目,相對其他產(chǎn)品,無線自發(fā)電照明燈開關(guān)已經(jīng)有了一些天然優(yōu)勢,無需電池可進(jìn)行自我發(fā)電發(fā)射信號。我國發(fā)展全局的重要發(fā)展理念是綠色、環(huán)保、節(jié)能,無線自發(fā)電照明燈開關(guān)是根據(jù)手按壓開關(guān)面板時(shí)產(chǎn)生的短暫的機(jī)械動(dòng)能轉(zhuǎn)換成電能,這就很好的解決了電池更換問題,而項(xiàng)目的優(yōu)勢是建立在原有的無線電開關(guān)基礎(chǔ)之上,有效解決了漏觸電的風(fēng)險(xiǎn)。但是,無線自發(fā)電照明燈開關(guān)想要在當(dāng)前時(shí)代發(fā)展還需要跟上時(shí)代的腳步。拋開自身自發(fā)電的優(yōu)勢,也需要有在物聯(lián)網(wǎng)上的控制功能,這樣才能在市場中有其一席之地。而基于Android端的紅外藍(lán)牙一體化開關(guān)就是基于無線自發(fā)電照明燈開關(guān)的物聯(lián)網(wǎng)拓展軟件,主要是輔助其在互聯(lián)網(wǎng)上的控制,表現(xiàn)在于通過手機(jī)達(dá)到控制的效果,這樣就能填補(bǔ)無線自發(fā)電照明燈開關(guān)在物聯(lián)網(wǎng)方面的空白,也使得開關(guān)在控制時(shí)更加便捷。

????????基于Android系統(tǒng)的紅外藍(lán)牙一體化開關(guān)分為三個(gè)部分,第一個(gè)部分是紅外線控制端,利用紅外線發(fā)射信號,使控制端收到紅外信號后控制LED燈。第二部分是藍(lán)牙控制端,使藍(lán)牙與控制端建立連接,當(dāng)接收端接收到信號后控制LED燈。第三部分是百度搜索界面,為用戶提供簡單的搜索功能。

????????本論文將對其控制的原理,包括紅外線控制和藍(lán)牙控制,以及接收端的實(shí)現(xiàn)進(jìn)行詳細(xì)的闡述,實(shí)現(xiàn)紅外控制、藍(lán)牙控制和百度界面三個(gè)功能。

2.系統(tǒng)開發(fā)環(huán)境

2.1可行性分析

????????近年來,隨著移動(dòng)設(shè)備的高速發(fā)展,移動(dòng)設(shè)備越來越智能化,人們越來越離不開這些給日常生活帶來極大便利的智能機(jī),智能機(jī)的出現(xiàn),極大的提高人們的工作學(xué)習(xí)效率,增加獲得信息的渠道,突破了空間的限制,讓你隨時(shí)隨地感受到外面的世界。開關(guān)控制系統(tǒng)可以基于Android系統(tǒng)進(jìn)行開發(fā),協(xié)助無線自發(fā)電照明燈開關(guān)的控制,使控制多樣化。

????????可行性分析既不能以偏蓋全,也不能過于追求細(xì)節(jié),必須為決策提供有價(jià)值的證據(jù)。因此,一般來說是需要從市場、政策、經(jīng)濟(jì)、技術(shù)、人員等各方面因素來分析這個(gè)系統(tǒng)項(xiàng)目開發(fā)的可實(shí)行性[3]。而在軟件領(lǐng)域的可行性分析一般至少從下述三個(gè)方面研究其可行性:技術(shù)可行性分析、經(jīng)濟(jì)可行性分析、操作可行性分析[4]。

????????技術(shù)可行性分析:Android系統(tǒng)是基于Java或Kotlin編寫的,同時(shí),在開發(fā)時(shí)可以選擇Android Studio配上Android SDK或連接真機(jī)操作,完全可以實(shí)現(xiàn)系統(tǒng)功能,加上開發(fā)者本身具有的Java功底,以及Android的開放性,有許多開放性代碼可以參考和學(xué)習(xí),實(shí)現(xiàn)權(quán)限調(diào)動(dòng)、信號發(fā)射等技術(shù)是可行的。對于測試接收端,利用Arduino可以實(shí)現(xiàn)代碼的自由編寫,達(dá)到與軟件配對控制的效果,而Arduino的編程語言也十分簡單,具有C/C++語言功底的人完全能編寫得出來,因此在這方面也是具有可行性的。

????????經(jīng)濟(jì)可行性分析:從成本方面看,系統(tǒng)的實(shí)現(xiàn),計(jì)算機(jī)和網(wǎng)絡(luò)硬件已經(jīng)擁有。由于Android是個(gè)開放的平臺,Android Studio與Android SDK都是免費(fèi)提供的,而接收端的Arduino也是免費(fèi)提供的,現(xiàn)實(shí)設(shè)備也僅僅百來塊,因此成本很低;從效益方面看,控制開關(guān)主要是為無線自發(fā)電照明燈開關(guān)添加手機(jī)控制的空白,暫時(shí)還不會(huì)帶來任何經(jīng)濟(jì)收益,不過經(jīng)過完善后,當(dāng)無線自發(fā)電照明燈開關(guān)開始進(jìn)入市場,作為輔助性的紅外藍(lán)牙一體化開關(guān)也可以為其添加動(dòng)力,一旦在社會(huì)上推廣,加上Android系統(tǒng)的廣泛應(yīng)用,相信會(huì)有很大的盈利空間。因此,從這兩方面來看也是可行的。

????????操作可行性分析:開發(fā)人員有著多語言開發(fā)的功底,對C#、Java、Python等都有所涉及,建立在這些語言上的應(yīng)用開發(fā)對開發(fā)人員來說,無論是學(xué)習(xí)還是應(yīng)用都不是很困難,加上指導(dǎo)老師的悉心教導(dǎo)完全可以勝任此次開發(fā)。由于此系統(tǒng)開發(fā)并不是以盈利為目的,開發(fā)周期可以相對較長,因此對于開發(fā)人員的要求不是很高,具有一定開發(fā)能力的開發(fā)人員即可。從法律角度看,Android Studio、Arduino等平臺是個(gè)開放平臺,加上基于Android的紅外藍(lán)牙一體化開關(guān)主要是輔助無線自發(fā)電照明燈開關(guān)在互聯(lián)網(wǎng)上的控制,作為畢業(yè)設(shè)計(jì),自主開發(fā),不收取任何開發(fā)費(fèi)用,具有學(xué)習(xí)等性質(zhì),因此不會(huì)在社會(huì)上引起侵權(quán)或其它責(zé)任問題。因此,在開發(fā)的操作上也是可行的。

2.2 開發(fā)工具介紹

????????Android及SDK介紹:SDK指的是軟件開發(fā)包,是軟件開發(fā)工程師用來為特定硬件開發(fā)軟件的軟件開發(fā)平臺和應(yīng)用程序包的集合。因此,Android SDK是Android專屬的軟件開發(fā)工具包。

????????Android Studio簡介:Android Studio是Google推出的Android應(yīng)用開發(fā)集成開發(fā)環(huán)境(IDE),它提供了很多提高Android應(yīng)用的構(gòu)建框架,使得開發(fā)人員的工作效率大大提升,類似 Eclipse ADT,Android Studio 還提供了一系列的模擬機(jī)測試,可進(jìn)行真機(jī)調(diào)試也可模擬調(diào)試。

????????Android Studio用Java語言或Kotlin語言開發(fā),Java對于廣大的編程者來說是比較簡單的。Android Studio作為Google官方推出的Android開發(fā)語言,其功能是十分強(qiáng)大的,有著許多第三方SDK、開源項(xiàng)目,強(qiáng)大的構(gòu)建系統(tǒng)Gradle,功能強(qiáng)大的布局編輯器,可以拖拉 UI 控件并進(jìn)行效果預(yù)覽,廣泛應(yīng)用在手機(jī)、平板、可穿戴設(shè)備(谷歌眼鏡、手表)、TV、自動(dòng)汽車等app。還有在Android系統(tǒng)權(quán)限的調(diào)用,Android Studio使用編程語言,可以更好的調(diào)用手機(jī)中的設(shè)置和權(quán)限,讓app調(diào)動(dòng)變得更見簡單。在測試界面上,可以進(jìn)行真機(jī)演示,也可以進(jìn)行模擬機(jī)演示。模擬機(jī)的演示只需要選擇型號或者去網(wǎng)上尋找相應(yīng)的包導(dǎo)入后即可,而真機(jī)的演示可以直接接入手機(jī)后,Android Studio可直接識別。紅外藍(lán)牙一體化開關(guān)即通過Android Studio連接真機(jī)(Redmi Note 8 Pro),匹配Android SDK進(jìn)行軟件的開發(fā)。

????????Arduino簡介:Arduino是開源電子原型平臺,它非常便捷靈活,也極易上手,對于非專業(yè)的使用人員來說是十分友好的。包含硬件(各種型號的Arduino板)和軟件(Arduino IDE)。它構(gòu)建于開放原始碼simple I/O介面版,使用的語言基本與我們熟知的Java、C語言非常相似。它主要有兩個(gè)部分:硬件部分是可以實(shí)現(xiàn)電路的連接,利用Arduino電路板與所需要的模塊進(jìn)行連接就能實(shí)現(xiàn)相應(yīng)的功能;另外一個(gè)則是Arduino IDE,你的計(jì)算機(jī)中的程序開發(fā)環(huán)境。只要在IDE中輸入所需要執(zhí)行的操作,并將相應(yīng)的程序燒入到Arduino電路板,通過其芯片實(shí)現(xiàn)相應(yīng)的邏輯關(guān)系,最終達(dá)到實(shí)現(xiàn)功能的效果。有著編程基礎(chǔ)的人員來說是十分方便的,加上其本身的語言也十分簡單,與C語言最為相似,因此,想要實(shí)現(xiàn)自己想要的功能還是十分簡單的。

????????系統(tǒng)開發(fā)時(shí),良好的開發(fā)環(huán)境是非常重要的,例如硬件配置設(shè)計(jì)、系統(tǒng)模塊結(jié)構(gòu)設(shè)計(jì)、代碼設(shè)計(jì)等。項(xiàng)目開發(fā)環(huán)境及技術(shù)參數(shù)要求如表4.1所示。

表 4.1 項(xiàng)目開發(fā)環(huán)境及技術(shù)參數(shù)要求.

名稱

項(xiàng)目開發(fā)環(huán)境及技術(shù)參數(shù)

操作系統(tǒng)

Windows 10

開發(fā)語言

Java

開發(fā)工具

Android Studio 2020.3.1.26 Windows版

機(jī)帶RAM

8.00GB

硬盤存儲

137GB(可用11GB)

CPU

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

手機(jī)模擬機(jī)型號

Redmi Note 8 Pro

手機(jī)模擬機(jī)運(yùn)行內(nèi)存

8GB

手機(jī)模擬機(jī)Android版本

10

接收端開發(fā)工具

Arduino 1.8.19 Windows

接收端開發(fā)板

UNO-R3官方開發(fā)板

藍(lán)牙串口模塊

HC-05、JDY-31藍(lán)牙模塊、BT18藍(lán)牙模塊

紅外模塊

數(shù)字38KHz紅外接收頭????????????????????????????????????????????????????????????????

3.需求分析

????????一個(gè)系統(tǒng)的出現(xiàn)必然是因?yàn)樾枨?#xff0c;有了需求系統(tǒng)才會(huì)有設(shè)計(jì)的思路,這樣的設(shè)計(jì)才會(huì)有目的,也才會(huì)有所作用。首先系統(tǒng)應(yīng)該具有的一些特性,如易操作、功能簡單明了不令人誤解、系統(tǒng)運(yùn)行流暢,功能實(shí)現(xiàn)快、系統(tǒng)維護(hù)以及更新應(yīng)方便和簡單等。在具有這些基本特性后,滿足設(shè)計(jì)需求必然是無可厚非的,這是必然需要著重考慮的。因此就必須要對系統(tǒng)進(jìn)行需求分析。

3.1 功能需求分析

????????目前,在市面上的控制方式主要有三種:紅外線控制、射頻控制、藍(lán)牙控制。這三種控制方式,各有各的優(yōu)勢。紅外線控制,優(yōu)點(diǎn)是簡單、便捷,無需進(jìn)行連接直接發(fā)射信號。缺點(diǎn)是控制時(shí),發(fā)射信號要對向接收端,且中間不能有東西阻擋,容易受到各種熱源的影響。藍(lán)牙控制優(yōu)點(diǎn)是在建立連接后,信號發(fā)射穩(wěn)定,抗干擾能力強(qiáng),傳輸能力、穿透能力強(qiáng),缺點(diǎn)是需要建立穩(wěn)定的連接。射頻控制手機(jī)上不易實(shí)現(xiàn),因此不在考慮范圍內(nèi)。考慮到開關(guān)需要根據(jù)不同情況選擇不同的控制方式以及用戶需求,因此在設(shè)計(jì)時(shí),會(huì)需要設(shè)計(jì)紅外控制功能、藍(lán)牙控制功能和百度頁面搜索功能。

????????基于上述的功能需求分析,現(xiàn)從整體上對系統(tǒng)進(jìn)行業(yè)務(wù)流程分析。完整的業(yè)務(wù)邏輯關(guān)系能夠快速的找到各功能之間的關(guān)系,業(yè)務(wù)流程圖就能很好的將系統(tǒng)流程用圖像表現(xiàn)出來。進(jìn)入系統(tǒng)界面,首先顯示出三個(gè)模塊的界面,在界面下面也會(huì)有界面的選擇,接著對每個(gè)模塊進(jìn)行流程分析。紅外線界面主要有兩方面體現(xiàn)一個(gè)是有紅外功能調(diào)用功能發(fā)射紅外信號,另一個(gè)就是無紅外功能的顯示。藍(lán)牙界面主要是對藍(lán)牙控制的各個(gè)功能之間的判斷,以連接和發(fā)射為主。第三個(gè)模塊就是關(guān)于百度搜索模塊,主要就是進(jìn)行百度搜索。詳細(xì)的系統(tǒng)業(yè)務(wù)流程圖如例圖3.1所示。

圖 3.1 紅外藍(lán)牙一體化開關(guān)業(yè)務(wù)流程圖圖示

(1)紅外線控制功能能夠調(diào)用紅外線系統(tǒng),發(fā)射紅外線信號。系統(tǒng)通過調(diào)用手機(jī)端的紅外線功能達(dá)到發(fā)送信號的效果,當(dāng)接收端接收到紅外線信號時(shí),進(jìn)行一次開關(guān)操作。功能如例圖3.2。

圖 3.2 紅外線控制功能與接收端的需求分析E-R圖

(2)藍(lán)牙控制功能包括藍(lán)牙掃描功能、藍(lán)牙連接功能、藍(lán)牙操作功能、藍(lán)牙斷開功能。它能夠調(diào)用手機(jī)的藍(lán)牙系統(tǒng),發(fā)送控制信號。系統(tǒng)可以通過調(diào)用手機(jī)端的藍(lán)牙功能,建立手機(jī)與接收端的連接,當(dāng)控制系統(tǒng)發(fā)送信號,接收端接收到信號時(shí),進(jìn)行一次開關(guān)操作。功能如例圖3.3。

圖 3.3 藍(lán)牙控制功能與接收端的需求分析E-R圖

(3)百度搜索功能可以給用戶提供一個(gè)搜索界面,用戶可以根據(jù)自己的需要在里面進(jìn)行搜索、查找。功能如例圖3.4。

圖 3.4 百度搜索功能與用戶的需求分析E-R圖

3.2 數(shù)據(jù)流程圖

????????數(shù)據(jù)流程圖是一種用于描述系統(tǒng)數(shù)據(jù)流程關(guān)系的工具,它可以從復(fù)雜的數(shù)據(jù)獨(dú)立抽象而出,并且用圖像的暗示來闡述信息的來源和實(shí)際的流程圖,它反應(yīng)系統(tǒng)必須完成的邏輯功能。從邏輯上進(jìn)行分析,以圖片的形式刻畫出運(yùn)行的先后順序。對于系統(tǒng)來說,想要實(shí)現(xiàn)每一個(gè)功能,必然要有一套完整的邏輯系統(tǒng),而數(shù)據(jù)流程圖就能很好的體現(xiàn)它們之間的變化關(guān)系。

(1)紅外線控制功能的主要工作集中在設(shè)備本身權(quán)限的判斷和調(diào)用上。用戶在打開系統(tǒng)時(shí),系統(tǒng)會(huì)自動(dòng)判斷移動(dòng)設(shè)備是否有紅外線功能,并立馬給出彈框反饋,如果有則會(huì)提示,否則不做提示直接進(jìn)行紅外線的獲取。在獲取完成后,等待用戶操作。在準(zhǔn)備工作結(jié)束后,用戶就可以通過紅外線控制界面的控制按鈕進(jìn)行信號的發(fā)射。當(dāng)用戶按下開關(guān),移動(dòng)設(shè)備就會(huì)發(fā)射紅外線信號,當(dāng)接收端接收到信號后,完成控制。紅外線控制功能數(shù)據(jù)流程圖如圖3.5。

圖 3.5 紅外線控制流程圖

(2)藍(lán)牙掃描功能是建立藍(lán)牙連接的前提,是整個(gè)控制過程最占線程的一部分,也是最消耗時(shí)間的一步。在用戶選擇到藍(lán)牙操作界面后,系統(tǒng)會(huì)自動(dòng)判斷手機(jī)是否具備藍(lán)牙功能,如果不具備則會(huì)提示說明。接著判斷藍(lán)牙是否打開,如果還未打開藍(lán)牙則請求打開藍(lán)牙。此時(shí)準(zhǔn)備部分結(jié)束,進(jìn)入掃描界面,請求手機(jī)位置權(quán)限。當(dāng)獲得手機(jī)的位置權(quán)限后,系統(tǒng)進(jìn)行廣播,尋找周邊的藍(lán)牙,最后掃描返回已配對和未配對的設(shè)備。藍(lán)牙掃描功能數(shù)據(jù)流程圖如圖3.6。

圖 3.6 藍(lán)牙掃描功能數(shù)據(jù)流程圖

(3)藍(lán)牙連接功能主要是與掃描返回的設(shè)備建立連接。掃描界面返回掃描到的設(shè)備后,用戶根據(jù)需求進(jìn)行連接。此時(shí),系統(tǒng)通過監(jiān)聽操作,當(dāng)用戶點(diǎn)擊設(shè)備時(shí),表明要與該設(shè)備進(jìn)行連接。由于掃描是占用主要線程,因此要使連接順利建立,一般需要將掃描停止掉,這樣才能把線程釋放出來,再進(jìn)行連接。建立連接后,顯示連接信息,跳轉(zhuǎn)藍(lán)牙控制界面。藍(lán)牙連接功能數(shù)據(jù)流程圖如圖3.7。

圖 3.7 藍(lán)牙連接功能數(shù)據(jù)流程圖

(4)藍(lán)牙操控功能提供藍(lán)牙操控的界面。用戶在選擇設(shè)備并建立連接后,通過控制開關(guān)達(dá)到控制的效果。用戶按下開關(guān),移動(dòng)設(shè)備就會(huì)通過已經(jīng)建立好的連接,發(fā)出藍(lán)牙信號,當(dāng)接收端接收到信號后,完成控制。藍(lán)牙操控功能數(shù)據(jù)流程圖如圖3.8。

圖 3.8 藍(lán)牙操控功能數(shù)據(jù)流程圖

(5)藍(lán)牙斷開功能提供藍(lán)牙的斷開操作,當(dāng)用戶不再控制時(shí),可直接點(diǎn)擊斷開連接按鈕,即可完成斷開連接操作,此時(shí)可重新進(jìn)行連接,返回選擇其他設(shè)備進(jìn)行連接。藍(lán)牙斷開功能數(shù)據(jù)流程圖如圖3.9。

圖 3.9 藍(lán)牙斷開功能數(shù)據(jù)流程圖

(6)百度搜索功能提供百度的簡單搜索,給用戶對于問題的搜索更加方便。百度搜索功能數(shù)據(jù)流程圖如圖3.10。

圖 3.10 百度搜索功能數(shù)據(jù)流程圖

4.總體設(shè)計(jì)

4.1 系統(tǒng)整體模塊設(shè)計(jì)

????????根據(jù)需求分析可以很清晰的看到各個(gè)功能模塊之間的相互聯(lián)系和設(shè)計(jì)思路,這給系統(tǒng)的整體設(shè)計(jì)提供了非常重要的邏輯支撐,因此在總體設(shè)計(jì)中就可以可以很快的得到系統(tǒng)的整體模塊設(shè)計(jì)。在系統(tǒng)模塊結(jié)構(gòu)設(shè)計(jì)方面,紅外藍(lán)牙一體化開關(guān)主要提供紅外線控制、藍(lán)牙控制、百度搜索三個(gè)功能。其中藍(lán)牙功能分為藍(lán)牙掃描、藍(lán)牙連接、藍(lán)牙操控、藍(lán)牙斷開四個(gè)功能。將系統(tǒng)分為三個(gè)模塊:紅外線控制模塊、藍(lán)牙控制模塊、百度搜索模塊。如圖示4.1。

(1)紅外線模塊主要實(shí)現(xiàn)紅外線發(fā)射和紅外線開關(guān)操作兩個(gè)功能。用戶在使用紅外線控制模塊時(shí),系統(tǒng)首先會(huì)判斷使用的移動(dòng)設(shè)備是否支持紅外線功能,之后才能完整的使用紅外線發(fā)射和紅外線開關(guān)操作兩個(gè)功能。用戶可以使用紅外線發(fā)射功能,通過已支持紅外發(fā)射的移動(dòng)設(shè)備發(fā)射紅外信號0xFF38C77D(十六進(jìn)制),而發(fā)射紅外信號的方向必須是用戶可控的,這樣用戶才可以根據(jù)自己的需求向特定的方向發(fā)射信號,從而實(shí)現(xiàn)一對多的控制。紅外線操控功能則是提供給用戶一個(gè)紅外控制開關(guān),當(dāng)用戶按下開關(guān),設(shè)備便會(huì)響應(yīng)紅外信號發(fā)射事件,發(fā)出紅外線信號,接收端接收到紅外信號時(shí),可以進(jìn)行一次控制,當(dāng)再次按下開關(guān)時(shí),則會(huì)進(jìn)行一次否操作,即如果當(dāng)前為關(guān),則按下后則為開。

(2)藍(lán)牙控制模塊包含掃描藍(lán)牙功能、藍(lán)牙連接功能、藍(lán)牙操作功能和藍(lán)牙斷開功能。藍(lán)牙控制模塊同紅外控制模塊一樣,在使用前都需要判斷功能是否可用。用戶在進(jìn)入藍(lán)牙控制界面后,需要調(diào)用手機(jī)自身帶有的藍(lán)牙功能,即如果移動(dòng)設(shè)備還沒有打開藍(lán)牙,則需要打開藍(lán)牙。藍(lán)牙掃描功能和藍(lán)牙連接功能提供了設(shè)備發(fā)現(xiàn)和設(shè)備連接。用戶在使用藍(lán)牙掃描功能時(shí),系統(tǒng)首先要獲得手機(jī)定位權(quán)限(Android 6.0以后使用藍(lán)牙掃描還需要獲得位置權(quán)限),通過設(shè)備掃描,獲得配對和未配對的藍(lán)牙設(shè)備,在掃描界面返回設(shè)備名稱和MAC地址后,用戶就可以利用連接功能,對用戶所需要控制的藍(lán)牙設(shè)備進(jìn)行連接,而這種可選擇性的連接方式,提供給用戶一對多的選擇,也就是說,用戶可以根據(jù)自己的需求控制開關(guān),實(shí)現(xiàn)一對多的控制。藍(lán)牙操作功能與紅外線操作功能相似,也是提供給用戶一個(gè)控制開關(guān),當(dāng)用戶按下開關(guān),設(shè)備便會(huì)響應(yīng)藍(lán)牙信號發(fā)送事件,通過已連接的藍(lán)牙發(fā)出藍(lán)牙信號,接收端接收到藍(lán)牙信號時(shí),可以進(jìn)行一次控制,當(dāng)再次按下開關(guān)時(shí),則會(huì)進(jìn)行一次否操作。而不同的則是,藍(lán)牙控制中還為用戶提供了藍(lán)牙斷開功能,因?yàn)榭紤]到用戶需要實(shí)現(xiàn)一對多的控制,所以想要建立新的藍(lán)牙連接,那么就得將原來的連接斷開,這樣在返回到上個(gè)界面重新選擇設(shè)備進(jìn)行連接時(shí),才能正常的建立連接。

(3)百度搜索模塊包含百度搜索功能。百度搜索功能是提供百度的簡單搜索,為用戶的搜索提供了便利。

圖 4.1 系統(tǒng)模塊層次方框圖

????????對于系統(tǒng)功能本身來說,在其功能上還是需要滿足一些要求的,保證在使用中能按照設(shè)計(jì)需求來使用。

(1)紅外線模塊實(shí)現(xiàn)發(fā)射紅外信號到開關(guān)接收端,自身檢測手機(jī)本身是否具有紅外線功能。

(2)藍(lán)牙設(shè)置模塊實(shí)現(xiàn)打開本機(jī)藍(lán)牙設(shè)置面板,查看掃描設(shè)備,檢查是否打開藍(lán)牙。

(3)打開藍(lán)牙模塊實(shí)現(xiàn)藍(lán)牙的打開,以及藍(lán)牙權(quán)限位置權(quán)限的獲取。

(4)搜索藍(lán)牙模塊實(shí)現(xiàn)藍(lán)牙設(shè)備的搜索和連接。

(5)藍(lán)牙控制模塊實(shí)現(xiàn)藍(lán)牙控制開關(guān)的功能。

(6)藍(lán)牙斷開模塊實(shí)現(xiàn)藍(lán)牙連接的斷開功能。

(7)百度搜索模塊實(shí)現(xiàn)百度搜索引擎的頁面實(shí)現(xiàn),能進(jìn)行簡單的百度搜索。

4.2 紅外編碼設(shè)計(jì)與藍(lán)牙通信設(shè)計(jì)

????????在紅外技術(shù)模塊中,需要調(diào)用紅外發(fā)射庫,實(shí)現(xiàn)發(fā)射紅外線信號,而發(fā)射紅外線信號的核心就在transmit()方法(Android ConsumerIrManager提供的一個(gè)方法,以pattern為紅外開關(guān)的時(shí)間數(shù)組,發(fā)送紅外信號)的信號編碼參數(shù)上,編碼由“引導(dǎo)碼(9ms+4.5ms)+用戶編碼(高八位)+用戶編碼(低八位)+鍵數(shù)據(jù)碼+鍵數(shù)據(jù)反碼+結(jié)束碼”組成,然后按照一定的編碼規(guī)則,合成數(shù)組的形式[5]。以NEC6122協(xié)議舉例,引導(dǎo)碼都是固定的(9000+4500),結(jié)束碼即停止位可以按照(560,2000),不同遙控器差別主要在于用戶碼和數(shù)據(jù)碼,同一個(gè)遙控器的用戶碼是一樣的,不同按鍵有不同的碼值,碼值可以轉(zhuǎn)換出對應(yīng)的數(shù)據(jù)碼和數(shù)據(jù)反碼。

????????在紅外控制模塊中,系統(tǒng)提供已經(jīng)編輯好的紅外編碼,并封裝好放在Pattern對象中,在需要時(shí)只需調(diào)用開發(fā)者所需要發(fā)射的紅外編碼即可。在Pattern對象中,信號編碼按照一定的編碼規(guī)則,由不同數(shù)組的形式存放,以第一種編碼方式舉例,圖4.2示如下。

圖 4.2 Pattern類中其中一種編碼

????????要想發(fā)射FF38C77D的紅外線信號,需要編輯出對應(yīng)的數(shù)據(jù)碼,數(shù)據(jù)碼是由引導(dǎo)碼+用戶碼+數(shù)據(jù)碼+數(shù)據(jù)反碼構(gòu)成,對于計(jì)算機(jī)來說,它所識別的是二進(jìn)制,因此還要將其表達(dá)為二進(jìn)制。首先是引導(dǎo)碼一般為9000 4500,它表示9ms高電平+4.5ms低電平,在計(jì)算機(jī)中,560,565,1690這些數(shù)組單位均為us,可以通過這個(gè)反應(yīng)出二進(jìn)制的0,1編碼。如“560us,1690us”為1,“560us ,565us”為0。于是編寫Android代碼的時(shí)候,使用“560,1690”表示二進(jìn)制的1,使用“560,565”表示二進(jìn)制的0。因此,開發(fā)者在想要編輯所需信號時(shí),只需按照0,1規(guī)則編輯十六進(jìn)制數(shù)即可。如560,1690, 560,1690, 560,565, 560,565表示為1100,二進(jìn)制轉(zhuǎn)為十六進(jìn)制則為字母C。

????????相較于紅外發(fā)射技術(shù),藍(lán)牙通信的實(shí)現(xiàn)可能會(huì)比較復(fù)雜一些。從總體來看,一般的藍(lán)牙通信需要經(jīng)歷掃描、配對、連接、信息交流這幾個(gè)步驟。通過掃描返回周邊藍(lán)牙設(shè)備的地址,再進(jìn)行配對,之后與設(shè)備進(jìn)行連接,最后實(shí)現(xiàn)信息交流。從這里可以看出藍(lán)牙功能實(shí)現(xiàn)的復(fù)雜性,不過也因此,藍(lán)牙通信也存在者很多的優(yōu)勢,如建立連接,使得通信會(huì)更加安全。

????????藍(lán)牙通信的難點(diǎn)在于掃描和連接。Bluetooth庫提供一些方法,雖然不能直接實(shí)現(xiàn),但是也給藍(lán)牙通信的設(shè)計(jì)帶來了極大的便利。

????????藍(lán)牙的掃描需要通過廣播(BroadcastReceiver)的形式獲得,也就是通過掃描獲得設(shè)備。調(diào)用BroadcastReceiver類,將得到的設(shè)備與intent.getParcelableExtra()方法比對,返回給顯示容器text。

????????藍(lán)牙的連接就得需要建立設(shè)備之間的通信通道。在這里就需要到前幾步得到的mac地址,因?yàn)檫€要對彼此唯一識別,這里就需要設(shè)計(jì)藍(lán)牙串口通用的UUID(可以在網(wǎng)上查找生成,且不會(huì)重復(fù))。在有了這些條件后,就可以利用在上一個(gè)返回配對的接口,調(diào)用connect()方法進(jìn)行連接,當(dāng)然也會(huì)有失敗的風(fēng)險(xiǎn),因此也要進(jìn)行判斷,這里可以利用try進(jìn)行異常判斷,這樣就能比較好的建立藍(lán)牙連接通信。

4.3 系統(tǒng)功能結(jié)構(gòu)設(shè)計(jì)

????????在總體設(shè)計(jì)中,為了進(jìn)一步體現(xiàn)出系統(tǒng)功能間的關(guān)系,讓關(guān)系更加清晰,可以通過結(jié)構(gòu)圖將其關(guān)系呈現(xiàn)出來。

????????從整體來看,設(shè)計(jì)應(yīng)分為紅外線界面、藍(lán)牙界面、百度界面三個(gè)大模塊。接下來再根據(jù)功能逐一展開。從應(yīng)用角度來看,這三個(gè)模塊除了在activity的主模塊中有交集,而在實(shí)際界面操作時(shí),就完全沒有關(guān)系,因此在設(shè)計(jì)fragment界面中,可以單獨(dú)對任意一個(gè)功能進(jìn)行實(shí)現(xiàn),不用考慮設(shè)計(jì)的先后順序。呈現(xiàn)其關(guān)系的結(jié)構(gòu)圖如4.3所示。

圖 4.3 系統(tǒng)界面結(jié)構(gòu)圖

????????紅外線模塊包括紅外線發(fā)射和紅外開關(guān)操作,發(fā)射器作為信號發(fā)射,與接收端信息交流,控制開關(guān)負(fù)責(zé)控制供用戶使用。模塊關(guān)系的結(jié)構(gòu)圖如4.4所示。

圖 4.4 紅外線模塊結(jié)構(gòu)圖

????????藍(lán)牙模塊包括藍(lán)牙打開功能、藍(lán)牙掃描功能、藍(lán)牙連接功能、藍(lán)牙操作功能、藍(lán)牙斷開功能和重新連接功能。這些功能之間都是相互聯(lián)系的,單獨(dú)存在意義不大,一般都作為一個(gè)整體出現(xiàn)。模塊關(guān)系的結(jié)構(gòu)圖如圖4.5所示。

圖 4.5藍(lán)牙模塊結(jié)構(gòu)圖

5.詳細(xì)設(shè)計(jì)

5.1主界面設(shè)計(jì)

????????主界面為系統(tǒng)建立三個(gè)fragment UI面板,可以在一個(gè)activity中實(shí)現(xiàn)三個(gè)模塊的功能。

????????主界面布局主要給fragment提供模塊的分配和基礎(chǔ)樣式,在這個(gè)基礎(chǔ)上建立屬于自己所需要的樣式。界面如圖5.1所示。

圖 5.1 activity主界面布局示圖

????????接著,建立三個(gè)fragment界面,分別實(shí)現(xiàn)紅外線控制、藍(lán)牙控制、搜索三個(gè)功能所需要的UI界面,為MainActivity.java 添加導(dǎo)航樣式。三個(gè)界面布局mobile_navigation.xml,導(dǎo)航的樣式可以在Android Studio中選擇,也可以添加文字字樣,可見bottom_nav_menu.xml代碼,樣式如圖5.2所示。

圖 5.2 fragment界面圖示

?????????activity主界面代碼設(shè)計(jì)思路是在建立三個(gè)fragment界面后,需要將它們與activity連接起來,這樣才能實(shí)現(xiàn)一個(gè)activity對應(yīng)多個(gè)UI界面。同時(shí)還需要有一個(gè)導(dǎo)航的功能,通過底層的導(dǎo)航就可以選擇到其他的UI界面,并實(shí)現(xiàn)它們之間的來回切換。而MainActivity.java主要實(shí)現(xiàn)這些功能,這部分可由activity直接生成,也可開發(fā)者自己編寫。

5.2 紅外線模塊

????????系統(tǒng)想要調(diào)用紅外線,需要先獲得移動(dòng)設(shè)備的紅外線權(quán)限,這樣在檢測、操作紅外線功能時(shí)才能調(diào)用移動(dòng)設(shè)備的權(quán)限,否則會(huì)報(bào)出錯(cuò)誤。想要獲得權(quán)限,開發(fā)者需要在AndroidManifest.xml添加權(quán)限,在這里可以通過<ses-permission android:name="…"/>添加相應(yīng)權(quán)限功能,其中紅外控制權(quán)限可添加

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

,判斷是否支持紅外運(yùn)行,可添加

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

????????紅外線控制界面主要實(shí)現(xiàn)開關(guān)控制的功能,所以界面布局會(huì)比較簡單,添加背景圖片和一個(gè)控制開關(guān),開關(guān)按鈕在被點(diǎn)擊后改變樣式。界面布局layout代碼存儲在fragment_home.xml,樣式如圖5.3所示。

圖 5.3 紅外線控制界面布局示圖

????????要實(shí)現(xiàn)紅外線模塊,首先使用的移動(dòng)設(shè)備需要有紅外線功能,因此在使用紅外線模塊時(shí),需要先檢測移動(dòng)設(shè)備是否具有紅外線功能,如移動(dòng)設(shè)備不具有紅外線功能則傳遞提示錯(cuò)誤信息,由當(dāng)前界面Toast出錯(cuò)誤提示,如圖5.4所示,若具有紅外線功能,則不彈出提示。首先紅外線功能的判斷需要在紅外線模塊的fragment建立時(shí)就需要進(jìn)行判斷,因此需要重寫onCreate方法,將判斷語句添加到onCreate。代碼如下所示,首先因?yàn)樵趂ragment界面,它不具有activity的方法,因此需要將activity的方法給實(shí)例化,這樣就可以使用activity中Toast方法,接著判斷Android的版本,當(dāng)版本小于一定的版本是必然不具備紅外線功能的,最后在利用hasIrEmitter函數(shù)判斷是否具有紅外線功能,具有則非空,否則返回false。

//調(diào)用主Activity的方法函數(shù)。MainActivity act = (MainActivity) getActivity();//判斷Android手機(jī)的系統(tǒng)是否支持紅外傳輸,即確定Android版本。if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//實(shí)例化service=(ConsumerIrManager)act.getSystemService(Context.CONSUMER_IR_SERVICE);//判斷手機(jī)是否有紅外功能,如沒有則會(huì)彈出提示,表明當(dāng)前手機(jī)不支持紅外遙控。if (!service.hasIrEmitter()){Toast.makeText(getActivity(), "當(dāng)前手機(jī)不支持紅外遙控", Toast.LENGTH_LONG).show();} 圖 5.4 界面Toast出錯(cuò)誤提示

????????紅外線控制功能在獲得權(quán)限后,接下來就是紅外信號的發(fā)射。在界面中需要添加一個(gè)按鈕開關(guān),當(dāng)按下開關(guān),紅外信號從移動(dòng)端發(fā)射,按鈕開關(guān)顏色變化,表示完成了一次紅外信號發(fā)射,如圖5.5所示。核心代碼設(shè)計(jì)如下,首先調(diào)用紅外線服務(wù),將類實(shí)例化,在與界面布局的按鈕建立連接,然后再編輯它的響應(yīng)事件,在事件中,從Pattern類中選擇開發(fā)者所需要發(fā)射編碼,利用發(fā)送紅外信號transmit方法,當(dāng)按下開關(guān)就完成一次發(fā)射,開關(guān)顏色改變。

//紅外線服務(wù)實(shí)例化service=(ConsumerIrManager)act.getSystemService(Context.CONSUMER_IR_SERVICE);//使fragment與Button建立連接。mBnt_1 = root.findViewById(R.id.text_home);//按鈕響應(yīng)事件mBnt_1.setOnClickListener(new View.OnClickListener() {@Override//設(shè)置按鈕樣式改變的標(biāo)記,flagpublic 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;}//選擇第一種編碼發(fā)送。Pt.Transmission = 1;pattern = Pt.Pattern();//發(fā)送紅外信號transmit方法service.transmit(38400, pattern);}}); 圖 5.5 紅外線控制開關(guān)變化

5.3 藍(lán)牙控制模塊

????????系統(tǒng)想要調(diào)用藍(lán)牙,需要先獲得移動(dòng)設(shè)備的藍(lán)牙權(quán)限,這樣在打開藍(lán)牙、發(fā)現(xiàn)藍(lán)牙和連接藍(lán)牙時(shí)才能調(diào)用移動(dòng)設(shè)備的權(quán)限。在掃描藍(lán)牙的過程中,對于Android 6.0以上的安卓系統(tǒng),需要打開移動(dòng)設(shè)備的位置定位權(quán)限,這樣才能在掃描中得到藍(lán)牙的位置,返回到掃描界面。藍(lán)牙權(quán)限和位置權(quán)限都需要開發(fā)者獲取,如果在使用時(shí),沒有獲得這些權(quán)限,系統(tǒng)將無法達(dá)到控制的效果。想要獲得權(quán)限,開發(fā)者需要在AndroidManifest.xml添加權(quán)限,在這里可以通過

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

添加相應(yīng)權(quán)限功能,其中添加藍(lán)牙控制權(quán)限可添加

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

啟動(dòng)設(shè)備發(fā)現(xiàn)權(quán)限添加"android.permission.BLUETOOTH",獲得位置權(quán)限添加

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

????????打開藍(lán)牙功能的頁面布局,主要看功能的需求。對于打開藍(lán)牙功能來說,它是藍(lán)牙控制的準(zhǔn)備工作,在這個(gè)布局中,可以做一些適當(dāng)?shù)恼f明和一些提示,但最主要的還是要實(shí)現(xiàn)相應(yīng)的功能,因此,在布局中添加了三個(gè)按鈕。第一個(gè)是打開藍(lán)牙按鈕。目的是讓用戶打開藍(lán)牙。第二個(gè)是藍(lán)牙設(shè)置按鈕。目的是在當(dāng)前界面無法操作的情況下,可以打開移動(dòng)設(shè)備的藍(lán)牙界面,利用本機(jī)藍(lán)牙界面進(jìn)行操作。第三個(gè)是開始操作按鈕。目的是在完整一系列準(zhǔn)備工作后,即完成藍(lán)牙打開的工作后,就可以進(jìn)入藍(lán)牙掃描界面,進(jìn)行藍(lán)牙控制的下一步操作。界面布局layout代碼存儲在fragment_dashboard.xml,樣式如圖5.6所示。

圖 5.6 打開藍(lán)牙功能界面布局圖示

????????藍(lán)牙模塊與紅外模塊一樣,在使用其功能時(shí),首先要確定移動(dòng)設(shè)備是否有模塊功能,因此,開發(fā)者要使用藍(lán)牙功能時(shí),需要先檢測移動(dòng)設(shè)備是否具有藍(lán)牙功能,如移動(dòng)設(shè)備不具有藍(lán)牙功能則傳遞提示錯(cuò)誤信息,由當(dāng)前界面Toast出錯(cuò)誤提示,如圖5.7所示,若具有藍(lán)牙功能,則不彈出提示。首先藍(lán)牙的判斷需要在藍(lán)牙模塊的fragment建立時(shí)就需要進(jìn)行判斷,因此需要重寫onCreate方法,將判斷語句添加到onCreate,在這里,將判斷作為一個(gè)單獨(dú)的方法呈現(xiàn),在onCreate中調(diào)用即可。代碼如下所示。

//判斷手機(jī)是否有藍(lán)牙功能,如沒有則會(huì)彈出提示,表明當(dāng)前手機(jī)不支持藍(lán)牙遙控。private void initInfrared2(){mBtA = BluetoothAdapter.getDefaultAdapter();if (mBtA == null){Toast.makeText(getActivity(), "當(dāng)前手機(jī)不支持藍(lán)牙遙控", Toast.LENGTH_LONG).show();}} 圖 5.7 界面Toast出錯(cuò)誤提示

????????打開藍(lán)牙功能主要是為之后藍(lán)牙的掃描,和藍(lán)牙的控制做準(zhǔn)備工作。在界面中添加的三個(gè)按鈕都有相應(yīng)的功能和目的。

????????(1)打開藍(lán)牙按鈕。目的是讓用戶打開藍(lán)牙。代碼設(shè)計(jì)如下,首先對控件進(jìn)行連接,接著編輯控件的響應(yīng)事件。首先進(jìn)行藍(lán)牙打開情況進(jìn)行判斷,如果藍(lán)牙已打開則Toast出"藍(lán)牙已打開",否則會(huì)請求打開藍(lán)牙,如圖5.8所示。

lBnt_4 = root.findViewById(R.id.Bnt_Bluetooth4);//藍(lán)牙權(quán)限判定lBnt_4.setOnClickListener(new View.OnClickListener() {public void onClick(View view) {if (mBtA.isEnabled()) {//藍(lán)牙已打開Toast.makeText(getActivity(), "藍(lán)牙已打開", Toast.LENGTH_SHORT).show();} else {Toast.makeText(getActivity(), "打開藍(lán)牙", Toast.LENGTH_SHORT).show();startActivityForResult(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE),REQUEST_ENABLE_BLUETOOTH);}}}); 圖 5.8 打開藍(lán)牙控件響應(yīng)事件示圖

????????(2)藍(lán)牙設(shè)置按鈕。目的是在當(dāng)前界面無法操作的情況下,可以打開移動(dòng)設(shè)備的藍(lán)牙界面,利用本機(jī)藍(lán)牙界面進(jìn)行操作。代碼設(shè)計(jì)如下,首先對控件進(jìn)行連接,接著編輯控件的響應(yīng)事件。對當(dāng)前藍(lán)牙打開情況進(jìn)行判斷,如果還沒有打開藍(lán)牙則會(huì)請求打開藍(lán)牙,反之直接進(jìn)入藍(lán)牙設(shè)置界面,如圖5.9所示。

lBnt_3 = root.findViewById(R.id.Bnt_Bluetooth1);//打開藍(lán)牙設(shè)置lBnt_3.setOnClickListener(new View.OnClickListener() {public void onClick(View view) {if(mBtA.isEnabled()){//打開設(shè)備的藍(lán)牙設(shè)置界面Intent tIntent = new Intent(android.provider.Settings.ACTION_BLUETOOTH_SETTINGS);startActivity(tIntent);}else {Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);//發(fā)出請求,打開藍(lán)牙startActivityForResult(intent, REQUEST_ENABLE_BT);}}}); 圖 5.9 藍(lán)牙設(shè)置按鈕響應(yīng)事件示圖

????????(3)開始操作按鈕。在完整一系列準(zhǔn)備工作后,即完成藍(lán)牙打開的工作后,就可以進(jìn)入藍(lán)牙掃描界面,進(jìn)行藍(lán)牙控制的下一步操作。代碼設(shè)計(jì)如下,首先對控件進(jìn)行連接,接著編輯控件的響應(yīng)事件。按鈕實(shí)現(xiàn)頁面的跳轉(zhuǎn),從當(dāng)前Fragment界面跳轉(zhuǎn)到Bluetooth_main_Activity.java,如果已經(jīng)打開藍(lán)牙,則直接跳轉(zhuǎn)界面,如圖5.10所示。

lBnt_send = root.findViewById(R.id.text_dashboard);//開始操作按鈕lBnt_send.setOnClickListener(new View.OnClickListener() {public void onClick(View view) {//頁面的跳轉(zhuǎn),從當(dāng)前Fragment界面跳轉(zhuǎn)到Bluetooth_main_ActivityIntent intent = new Intent(getActivity(),Bluetooth_main_Activity.class);//實(shí)現(xiàn)跳轉(zhuǎn)startActivity(intent);}}); 圖 5.10 開始操作按鈕跳轉(zhuǎn)頁面

?????????掃描藍(lán)牙功能所需要實(shí)現(xiàn)的功能主要有幾個(gè)方面。一是已配對和未配對設(shè)備的顯示。二是搜索按鈕的實(shí)現(xiàn)。三是搜索情況的友好反饋。四是監(jiān)聽用戶操作,與設(shè)備進(jìn)行配對或者連接。因此可以設(shè)計(jì)為三個(gè)部分,第一個(gè)為已配對部分,第二個(gè)為未配對部分,這兩個(gè)部分可以用TextView添加。第三部分就是搜索按鈕和搜索情的顯示。界面布局layout代碼存儲在activity_bluetooth_main.xml,樣式如圖5.11所示。

圖 5.11 掃描藍(lán)牙功能界面布局示圖

????????為了保險(xiǎn)起見,一般在跳轉(zhuǎn)另一個(gè)界面或者實(shí)現(xiàn)一個(gè)按鈕,在藍(lán)牙模塊中,都做一次藍(lán)牙是否打開的判斷,這樣就能保證系統(tǒng)的正常運(yùn)行,因此在掃描藍(lán)牙功能中,首先在界面創(chuàng)建時(shí)就立馬進(jìn)行判斷,如果沒用打開藍(lán)牙直接向用戶發(fā)起請求,如圖5.12。在解決藍(lán)牙權(quán)限問題后,就是位置權(quán)限的請求。對于Android 6.0及以上的Android設(shè)備來說,要掃描到藍(lán)牙設(shè)備必須還要獲得移動(dòng)設(shè)備的位置權(quán)限,這樣在掃描時(shí)才能正常返回出設(shè)備信息。因此,在界面從上個(gè)界面跳轉(zhuǎn)到掃描藍(lán)牙界面時(shí),就立馬進(jìn)行請求。添加權(quán)限、請求位置權(quán)限代碼如下所示。

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) {//未獲得權(quán)限this.requestPermissions( // 請求授權(quán)new String[]{Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION},ACCESS_LOCATION);// 自定義常量,任意整型}}} 圖 5.12 掃描界面請求定位權(quán)限

對于藍(lán)牙掃描功能的代碼設(shè)計(jì),可分為三個(gè)部分進(jìn)行實(shí)現(xiàn)。

????????(1)已配對、未配對藍(lán)牙設(shè)備。因?yàn)橐雅鋵臀磁鋵Φ膶?shí)現(xiàn)方式非常相似,而且需要很多共用的方法函數(shù),所以可以將這兩個(gè)功能同時(shí)實(shí)現(xiàn),如圖5.13。首先建立與textView控件的連接,以及對藍(lán)牙類的實(shí)例化,在Android Studio中,有很多藍(lán)牙調(diào)用的函數(shù)提供開發(fā)者使用。

text = findViewById(R.id.textView);text3 = this.findViewById(R.id.textView3); //未配對//藍(lán)牙實(shí)例化mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();接著是定義廣播接收,這一部分是掃描返回設(shè)備的關(guān)鍵,通過調(diào)用自建的BroadcastReceiver類,實(shí)現(xiàn)藍(lán)牙掃描和接收,然后返回,返回到device中,然后按照一定的格式寫到text中,通過textView控件展示給用戶。以下是廣播接收的代碼實(shí)現(xiàn)。if (action.equals(BluetoothDevice.ACTION_FOUND)) {device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);if (device.getBondState() == BluetoothDevice.BOND_BONDED) {//在已配對下面顯示已配對設(shè)備text.append("\n" + "設(shè)備:" + device.getName() + "\t" + "MAC地址:" + device.getAddress() + "\n");} else if (device.getBondState() != BluetoothDevice.BOND_BONDED) {//搜索到的,還沒有配對的設(shè)備,添加到還未配對的textView中text3.append("\n" + "設(shè)備:" + device.getName() + "\t" + "MAC地址:" + device.getAddress() + "\n");} else if (action.equals(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)) {//掃描完成,返回結(jié)束,界面友好提示text2.setText("搜索完成...");}} 圖 5.13 已配對、未配對設(shè)備顯示

????????(2)搜索藍(lán)牙與搜索情況提示。這部分,可以利用Button控件和TextView控件實(shí)現(xiàn)。搜索藍(lán)牙,需在控件中編輯控件的點(diǎn)擊事件。而搜索情況提示與搜索按鈕的控件是連接的,當(dāng)Button控件點(diǎn)擊時(shí),就改變初始的TextView,顯示正在搜索字樣。代碼實(shí)現(xiàn)如下。

button.setOnClickListener(new View.OnClickListener() {public void onClick(View view) {//textView返回長在搜索字樣text2.setText("正在搜索...");}});

????????(3)設(shè)備配對與連接。設(shè)備的配對與連接目的是通過點(diǎn)擊返回的設(shè)備,進(jìn)行配對或者連接操作,如圖5.14。當(dāng)設(shè)備已經(jīng)完成配對,那么用戶點(diǎn)擊已配對設(shè)備則會(huì)直接跳轉(zhuǎn)到連接界面,然后進(jìn)行控制操作,而藍(lán)牙的連接在進(jìn)入控制界面時(shí)會(huì)自動(dòng)進(jìn)行連接,因此,其核心是,通過點(diǎn)擊設(shè)備進(jìn)行頁面添跳轉(zhuǎn)。以下是點(diǎn)擊事件的代碼實(shí)現(xiàn)。

text.setOnClickListener(new View.OnClickListener() {public void onClick(View view) {//獲得設(shè)備的Mac地址,并將結(jié)果賦給變量aString a = device.getAddress();//實(shí)現(xiàn)頁面的跳轉(zhuǎn),從當(dāng)前頁面跳轉(zhuǎn)到BluetoothActivity控制界面Intent intent = new Intent(Bluetooth_main_Activity.this, BluetoothActivity.class);//Bundle打包數(shù)據(jù),此處是Bundle實(shí)例化Bundle bundle = new Bundle();//key:mac?? date:abundle.putString("mac", a);//把附加的數(shù)據(jù)放到意圖當(dāng)中,并發(fā)送intent.putExtras(bundle);//執(zhí)行意圖,并實(shí)現(xiàn)界面的跳轉(zhuǎn)startActivity(intent);}}); 圖 5.14 接收端和發(fā)射端藍(lán)牙設(shè)備連接示圖

????????藍(lán)牙操作功能和藍(lán)牙斷開功能是在掃描結(jié)束后進(jìn)行的,主要的作用就是控制開關(guān)。因此,在布局中也會(huì)比較簡單、明了,添加三個(gè)Button按鈕實(shí)現(xiàn)斷開、重連、控制三個(gè)功能,最后再添加一個(gè)textView作為控制界面的信息反饋。界面布局layout代碼存儲在activity_bluetooth.xml,樣式如圖5.15所示。

圖 5.15 藍(lán)牙操作與藍(lán)牙斷開功能頁面布局圖示

????????通過藍(lán)牙操控界面,用戶就可以實(shí)現(xiàn)與接收端連接,達(dá)到控制的效果,與紅外線控制模塊相似,在功能上要有一個(gè)控制開關(guān),當(dāng)開關(guān)按下時(shí)就會(huì)發(fā)射一次信號。而與紅外線控制不同的是,藍(lán)牙控制添加了斷開和重新連接的操作,以及控制情況的反饋。

????????連接、控制反饋功能,在界面中,系統(tǒng)在控制界面中會(huì)反饋當(dāng)前的連接情況以及控制情況。這個(gè)效果的實(shí)現(xiàn)可以用TextView控件來實(shí)現(xiàn),當(dāng)跳轉(zhuǎn)到控制界面時(shí),界面返回“正在進(jìn)行連接,請稍后”,當(dāng)完成連接時(shí),顯示“連接成功”,在發(fā)射信號時(shí),顯示“控制中”,在斷開連接時(shí),顯示“斷開連接”,如圖5.16。開發(fā)者只需將文字添加到程序進(jìn)行到的步驟中返回即可,如頁面從掃描界面跳轉(zhuǎn)到控制界面時(shí),此時(shí)系統(tǒng)在與接收端的藍(lán)牙進(jìn)行連接,這時(shí)就可以利用reture返回文字,在利用setText方法傳入TextView中,這樣文字就會(huì)根據(jù)當(dāng)先進(jìn)程反饋進(jìn)程情況。

圖 5.16 連接、控制等反饋功能示圖

????????連接和斷開連接功能,通過按鈕的點(diǎn)擊事件可以進(jìn)行干涉。掃描頁面跳轉(zhuǎn)到控制界面時(shí),由上一頁面?zhèn)鬏攣淼膍ac地址,通過當(dāng)前界面的接口接收,藍(lán)牙的連接需要有一個(gè)唯一的標(biāo)識,在這里可以利用藍(lán)牙串口通用的UUID進(jìn)行唯一標(biāo)識。連接時(shí)onPostExecute方法要在主線程中運(yùn)行的,所以在跳轉(zhuǎn)頁面時(shí),還有非常重要的一步,就是需要將原來的廣播關(guān)閉掉,這樣才能釋放線程,藍(lán)牙才能正常進(jìn)入連接。為了確保在連接出現(xiàn)錯(cuò)誤或者失敗時(shí),程序能正常運(yùn)行,在連接時(shí)一般利用try做異常處理,這樣當(dāng)出現(xiàn)錯(cuò)誤時(shí),可以進(jìn)行及時(shí)反饋,又能保證系統(tǒng)正常運(yùn)行。以下是主要連接代碼。

//try異常處理try {//UUID唯一標(biāo)識btSocket = device.createRfcommSocketToServiceRecord(MY_UUID);//連接btSocket.connect();} catch (IOException e) {//異常處理try {btSocket.close();return "Socket 創(chuàng)建失敗";} catch (IOException e2) {return "Socket 關(guān)閉失敗";}}//取消搜索mBluetoothAdapter.cancelDiscovery();//異常處理try { outStream = btSocket.getOutputStream();} catch (IOException e) {return "連接失敗";}return "藍(lán)牙連接正常";}對于斷開按鈕來說,只要實(shí)現(xiàn)在已有連接的情況將btSocket關(guān)閉,即原本建立的連接關(guān)閉,那么連接將會(huì)自動(dòng)斷開,如圖5.17。因此,斷開連接按鈕的點(diǎn)擊事件可以以這個(gè)方向進(jìn)行考慮。首先可以進(jìn)行判斷,如果連接沒能建立成功,則直接返回?cái)嚅_連接,否則嘗試斷開連接的操作,關(guān)閉btSocket,重新創(chuàng)建一個(gè)新的btSocket,此為空值,為了下次連接做準(zhǔn)備。代碼如下。//斷開連接btnQuit.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {if (btSocket != null) {try {? btSocket.close(); ?btSocket = null;statusLabel.setText("當(dāng)前連接已斷開");} catch (IOException e) {e.printStackTrace();}}}});

圖 5.17 設(shè)備藍(lán)牙斷開連接示圖

????????藍(lán)牙控制功能是控制藍(lán)牙信號發(fā)射的按鈕,在建立連接后,按下按鈕就會(huì)發(fā)出一次信號,實(shí)現(xiàn)控制的效果,其作用與紅外線開關(guān)相似,如圖5.18。首先控制問題,在Arduino中,編輯的控制模塊是當(dāng)控制端發(fā)射一次藍(lán)牙信號就可以完成一次控制,因此在點(diǎn)擊事件中,只需完成單擊一次完成一次信號發(fā)射即可。發(fā)射事件可以建立一個(gè)發(fā)送數(shù)據(jù)的類SendInfoTask,這樣在點(diǎn)擊事件中,只需引用SendInfoTask的方法進(jìn)行發(fā)送即可。

????????接著編輯點(diǎn)擊事件完成點(diǎn)擊發(fā)送數(shù)據(jù)和改變按鈕樣式實(shí)現(xiàn)控制一次變化的樣式。以下是點(diǎn)擊事件代碼。

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 藍(lán)牙控制功能開關(guān)控制變化示圖

5.4 百度搜索模塊

????????百度搜索模塊需要調(diào)用百度界面(https://baidu.com/),要想收到界面必然要有網(wǎng)絡(luò)的支持,因此,系統(tǒng)必須要得到移動(dòng)設(shè)備的網(wǎng)絡(luò)權(quán)限,這樣才能正常把界面加載出來。想要獲得權(quán)限,開發(fā)者需要在AndroidManifest.xml添加權(quán)限,在這里可以通過<ses-permission android:name="…"/>添加相應(yīng)權(quán)限功能,其中獲得網(wǎng)絡(luò)權(quán)限可添加"android.permission.INTERNET"。

????????百度搜索界面目的是將百度界面加載在移動(dòng)設(shè)備界面上,因此界面布局十分簡單。只需要在布局中添加WebView控件,將控件范圍設(shè)置完整個(gè)fragment界面,然后在加載百度界面,簡單來說就是設(shè)置一個(gè)容器,然后將網(wǎng)頁放入這個(gè)容器中,如圖5.19。界面布局layout代碼存儲在fragment_notifications.xml,樣式如圖所示。

圖 5.19 百度搜索界面WebView框架

????????百度搜索界面的加載是比較簡單的,效果如圖5.20所示。只需要三步,首先進(jìn)行WebView控件的連接,接著請求網(wǎng)絡(luò)連接最后輸入加載網(wǎng)址,界面就會(huì)加載在fragment界面上。以下實(shí)現(xiàn)代碼。

//百度控件。mWebView = root.findViewById(R.id.baidu);//請求網(wǎng)絡(luò)連接。mWebView.getSettings().setJavaScriptEnabled(true);mWebView.setWebViewClient(new MyBaiDuWebView());//百度地址。mWebView.loadUrl("https://baidu.com/");

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

6.接收端測試

????????這里的測試主要說明的是接收端接收到信號的測試情況,即當(dāng)系統(tǒng)發(fā)送信號,接收端接收到信號的變化情況,是否能達(dá)到所需效果。因此,這里面對的主要是發(fā)送、接收信號的測試。

????????測試的接收端使用Arduino UNO、紅外線接收模塊、藍(lán)牙HC-05模塊進(jìn)行。測試主要是檢測當(dāng)系統(tǒng)按下控制按鈕時(shí),連接在端口11的小燈是否能進(jìn)行控制,分為紅外線控制檢測、藍(lán)牙控制檢測兩個(gè)部分。

????????接收端Arduino代碼設(shè)計(jì)上,在接收端,需要編輯Arduino代碼以實(shí)現(xiàn)接收信號,控制的效果。代碼的原理也十分簡單,當(dāng)模塊接收到信號時(shí),燈亮,再接收到信號時(shí),燈滅。

if (digitalRead(11) == HIGH) {digitalWrite(11, LOW);? //關(guān)閉LED指令} else {digitalWrite(11, HIGH);? //點(diǎn)亮LED指令}

????????如圖6.1,當(dāng)按下按鈕,系統(tǒng)發(fā)射紅外線信號,Arduino板的紅外線接收模塊接收到紅外線信號后,對燈進(jìn)行一次控制,當(dāng)再按下一次開關(guān)則燈又會(huì)改變一次狀態(tài)。

圖 6.1 紅外線控制小燈測試

????????????????如圖6.2,當(dāng)按下按鈕,系統(tǒng)發(fā)射藍(lán)牙信號,Arduino板的HC-05藍(lán)牙模塊接收到藍(lán)牙信號后,對燈進(jìn)行一次控制,當(dāng)再按下一次開關(guān)則燈又會(huì)改變一次狀態(tài)。

圖 6.2 藍(lán)牙控制小燈測試

????????通過對本系統(tǒng)進(jìn)行的多次的測試,系統(tǒng)能非常準(zhǔn)確的完成各項(xiàng)功能,現(xiàn)場設(shè)備情況穩(wěn)定,基本滿足了用戶對系統(tǒng)功能的操作需求。在測試過程中,系統(tǒng)運(yùn)行穩(wěn)定,對于一些出現(xiàn)邏輯錯(cuò)誤的代碼程序也進(jìn)行了補(bǔ)充修改,整體效果與預(yù)期效果保持一致,運(yùn)行結(jié)果比較良好。

?

圖 6.1 紅外線控制小燈測試

????????如圖6.2,當(dāng)按下按鈕,系統(tǒng)發(fā)射藍(lán)牙信號,Arduino板的HC-05藍(lán)牙模塊接收到藍(lán)牙信號后,對燈進(jìn)行一次控制,當(dāng)再按下一次開關(guān)則燈又會(huì)改變一次狀態(tài)。

圖 6.2 藍(lán)牙控制小燈測試

????????通過對本系統(tǒng)進(jìn)行的多次的測試,系統(tǒng)能非常準(zhǔn)確的完成各項(xiàng)功能,現(xiàn)場設(shè)備情況穩(wěn)定,基本滿足了用戶對系統(tǒng)功能的操作需求。在測試過程中,系統(tǒng)運(yùn)行穩(wěn)定,對于一些出現(xiàn)邏輯錯(cuò)誤的代碼程序也進(jìn)行了補(bǔ)充修改,整體效果與預(yù)期效果保持一致,運(yùn)行結(jié)果比較良好。

?

7.總結(jié)

????????紅外藍(lán)牙一體化開關(guān)已經(jīng)基本實(shí)現(xiàn)了預(yù)期的功能,達(dá)到了系統(tǒng)控制的基本要求。用戶可以通過紅外線控制、藍(lán)牙控制兩種控制方式對燈進(jìn)行控制,并且是可以實(shí)現(xiàn)一對多的控制,因此在這方面還是比較符合預(yù)期要求的。不過由于技術(shù)水平有限,可能系統(tǒng)仍然存在著不完善的地方,在整個(gè)工程的結(jié)構(gòu)以及各個(gè)功能模塊之間的關(guān)系還存在著不足,相關(guān)關(guān)系可能還存在一些不合理,這些問題需要在日后不斷進(jìn)行完善。同時(shí),系統(tǒng)還有進(jìn)一步擴(kuò)展的空間,相信在未來能夠給用戶更好的體驗(yàn)和生活的便捷。

?

參考文獻(xiàn)

  • 艾媒網(wǎng)《手機(jī)行業(yè)數(shù)據(jù)分析:2021年中國網(wǎng)民智能手機(jī)操作系統(tǒng)為安卓的占比89.6% 》.(2021-08-03)[2022-02-27] 手機(jī)行業(yè)數(shù)據(jù)分析:2021年中國網(wǎng)民智能手機(jī)操作系統(tǒng)為安卓的占比89.6%-艾媒網(wǎng).
  • 華清遠(yuǎn)見 《Android開發(fā)平臺五大優(yōu)勢》技術(shù)文章[2022-03-09] Android開發(fā)平臺五大優(yōu)勢--華清遠(yuǎn)見嵌入式培訓(xùn)中心
  • 田志穎. 基于Android的移動(dòng)學(xué)習(xí)軟件設(shè)計(jì)與實(shí)現(xiàn)[D].曲阜師范大學(xué),2016.
  • 張海藩.軟件工程導(dǎo)論.清華大學(xué)出版社,1900:18-124.
  • Huangrong_000《紅外遙控及Android手機(jī)紅外遙控器開發(fā)》.( 2019-08-09)[2022-02-27] 紅外遙控及Android手機(jī)紅外遙控器開發(fā)_Huangrong_000的博客-CSDN博客_android遙控器開發(fā)
  • 余志龍 鄭名杰等.Google.Android.SDK開發(fā)范例大全.北京:人民郵電出版社,2009年:1~238
  • 李寧.Android開發(fā)權(quán)威指南.北京:機(jī)械工業(yè)出版社.2011年.
  • Kathy Sierra,Bert Bates著/楊尊一編譯 張然等改編. Head First Java(第二版·中文版). 中國電力出版社,2008.
  • 劉鎮(zhèn)鑰. 基于安卓平臺的無線語音通信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].山東大學(xué),2021.DOI:10.27272/d.cnki.gshdu.2021.004446.
  • 樸勇. 軟件工程實(shí)用教程[M].人民郵電出版社: 201508.264.
  • Jackie的儲物袋《軟件項(xiàng)目開發(fā)基本流程詳解》.( 2018-03-15)[2022-02-27] 軟件項(xiàng)目開發(fā)基本流程詳解_Jackie的儲物袋的博客-CSDN博客_開發(fā)軟件的基本流程
  • Android 開發(fā)者.藍(lán)牙開發(fā). 藍(lán)牙概覽 ?|? Android 開發(fā)者 ?|? Android Developers
  • 張文哲.基于安卓系統(tǒng)的教學(xué)管理平臺開發(fā)[J].江蘇科技信息,2018,35(34):50-52.2
  • 致? 謝

    ????????本人能夠比較順利的完成該次畢業(yè)設(shè)計(jì),離不開***的悉心指導(dǎo)。兩位不但在技術(shù)方面給予了指點(diǎn),還在編程思想以及學(xué)習(xí)方法等方面給予了指導(dǎo),使我在畢業(yè)設(shè)計(jì)的過程中有了專業(yè)技能和綜合能力的提高。也要感謝身邊的同學(xué)、朋友們對系統(tǒng)所提的建議與意見,使我對畢業(yè)設(shè)計(jì)的流程有了更加全面和完善的認(rèn)識。最后還要感謝組織畢業(yè)設(shè)計(jì)的老師們,沒有你們的辛勤付出,就沒有畢業(yè)設(shè)計(jì)的順利成功的進(jìn)行。

    總結(jié)

    以上是生活随笔為你收集整理的本科毕业论文-软件开发类-《基于Android端开关控制系统的设计与实现》-论文模板的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。