freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于android的智能家居系統(tǒng)設(shè)計(jì)畢業(yè)論文-文庫吧

2025-06-11 13:18 本頁面


【正文】 傳燈光的狀態(tài)以便LED燈和按鍵的狀態(tài)保持一致。鬧鐘界面中我們提供一個(gè)定時(shí)鬧鐘可以設(shè)定在24小時(shí)內(nèi)使蜂鳴器動(dòng)作一次。并且可以再鬧鐘發(fā)出聲響之前取消。在空調(diào)界面中由于也需要用到顯示溫度,可以通過溫度控制空調(diào)的開啟,另外由于硬件上的限制,空調(diào)在演示中也是以LED燈的形式演示。窗簾界面可以提供兩種控制窗簾的方法,包括手動(dòng)直接控制窗簾和通過光照值控制窗簾的開關(guān),為了方便用戶設(shè)定合適的光照值,界面中有對當(dāng)前光感的監(jiān)控。安防系統(tǒng)需要通過RFID的認(rèn)證才能進(jìn)入,此界面主要提高的安防功能是紅外和煙霧警報(bào),警報(bào)的方式都分別分為蜂鳴器警報(bào)和短信警報(bào),而且此界面也可以對已綁定的手機(jī)號碼和RFID卡進(jìn)行更換。本系統(tǒng)的界面使用Android寫成,把用戶需要求的數(shù)據(jù)傳到C語言層,最后由C語言層操控硬件。而C語言和JAVA之間的通信側(cè)是通過JNI來完成的。(如圖12)圖 12 2 總括 硬件本文所用到的主要硬件有:搭載CortexA8的GEC210嵌入式開發(fā)板,7英寸電阻屏,以及一塊硬件拓展版。下面是智能家居系統(tǒng)原理圖。 CortexA8本開發(fā)板GEC210搭載的主芯片為CortexA8,又名“蜂鳥”,是三星推出的一款適用于智能手機(jī)和平板計(jì)算機(jī)等多媒體設(shè)備的應(yīng)用處理器,CortexA8和S5PC110功能一樣,110小封裝適用于智能手機(jī),210封裝較大,主要用于平板計(jì)算機(jī)和上網(wǎng)本。圖21CortexA8采用了ARM CortexTMA8內(nèi)核,ARM V7指令集,主頻可達(dá)1GHZ,64/32位內(nèi)部總線結(jié)構(gòu),32/32KB的數(shù)據(jù)/指令一級緩存,512KB的二級緩存,可以實(shí)現(xiàn)2000DMIPS(每秒運(yùn)算2億條指令集)的高性能運(yùn)算能力。ARM cortexA8 CPU原理如圖21所示。 拓展板拓展版主要是為了拓展在GEC210上所沒有的硬件需求,以滿足智能家居的實(shí)驗(yàn)需要。具體包括:紅外模塊、繼電器模塊、步進(jìn)電機(jī)、直流電機(jī)、氣體傳感器、溫濕度傳感器、光敏感測器、GPRS模塊和RFID模塊。原理圖及IO引腳分配如圖22所示:圖22 RFID模塊芯片拓展版所用的RFID具體型號為MF RC522 , 非接觸式通信中高集成度讀寫卡系列芯片中的一員。是NXP 公司針對“三表”應(yīng)用推出的一款低 電壓、低成本、體積小的非接觸式讀寫卡芯片,是智能儀表和便攜 式手持設(shè)備研發(fā)的較好選擇。MF RC522 利用了先進(jìn)的調(diào)制和解調(diào)概念, 下所有類型的被動(dòng)非接觸式通信方式和協(xié)議。支持 ISO14443A 的多層應(yīng)用。其內(nèi)部發(fā)送器部分可驅(qū)動(dòng)讀寫器天線與ISO 14443A/MIFARE卡和應(yīng)答機(jī)的通信,無需其它的電路。接收器部分提供一個(gè)堅(jiān)固而有效的解調(diào)和解碼電路,用于處理ISO14443A 兼容的應(yīng)答器信號。數(shù)字部分處理ISO14443A 幀和錯(cuò)誤檢測(奇偶 amp。CRC)。此外,它還支持快速CRYPTO1 加密算法,用于驗(yàn)證MIFARE 系列產(chǎn)品。MFRC522 支持MIFARE?更高速的非接觸式通信,雙向數(shù)據(jù)傳輸速率高達(dá)424kbit/s。 JNIJNI是Java Native Interface的縮寫,中文名JAVA的本地調(diào)用。,Java Native Interface(JNI)標(biāo)準(zhǔn)成為java平臺的一部分,它允許Java代碼和其他語言寫的代碼進(jìn)行交互。JNI一開始是為了本地已編譯語言,尤其是C和C++而設(shè)計(jì)的,只要調(diào)用約定受支持就可以了。使用java與本地已編譯的代碼交互,通常會(huì)喪失平臺可移植性。但是,有些情況下這樣做是可以接受的,甚至是必須的,比如,使用一些舊的庫,與硬件、操作系統(tǒng)進(jìn)行交互,或者為了提高程序的性能。JNI標(biāo)準(zhǔn)至少保證本地代碼能工作在任何Java虛擬機(jī)實(shí)現(xiàn)。JNI在程序中作用的是Java和C的翻譯,在本設(shè)計(jì)中起到的作用是,讓C語言層得知Java的調(diào)用,以及把各種硬件信息通過實(shí)時(shí)刷新的方式不斷反饋到Java中。關(guān)系如圖23示:圖23 3 功能設(shè)計(jì) 主界面 溫濕度監(jiān)控顯示顯示溫濕度是智能家居的最基本功能,通過熒幕用戶可以隨時(shí)從中獲知當(dāng)前的溫度和濕度。由于溫濕度顯示并不需要觸發(fā)事件,因此打開程序的時(shí)候就會(huì)自動(dòng)觸發(fā)。溫濕度的顯示需要不斷地刷新,也為了方便其他數(shù)值的傳遞,我們定義了一個(gè)叫cflags的數(shù)組,定義clags的[1][2]是用于存放溫濕度的數(shù)值。另外光感應(yīng)驅(qū)動(dòng)也在這里打開,方便在同一個(gè)地方把需要隨時(shí)刷新的值都得到并及時(shí)更新到cflags里面去。在監(jiān)控溫濕度的線程中,首先根據(jù)驅(qū)動(dòng)給的借口,取得溫濕度傳感器的檔描述符fdtemperature,通過IO控制函數(shù)temperature_ioctl(fdtemperature , amp。cflags[1])。還有emperature_ioctl(fdtemperature , amp。cflags[0])。不斷循環(huán)并取得當(dāng)前的溫濕度數(shù)值。在取得數(shù)值之后,通過安卓里面的handler隨時(shí)刷新數(shù)值,而C層需要做的就是不斷更新數(shù)組里面的所有數(shù)據(jù)并通過JNI傳到上層以達(dá)到界面層和運(yùn)算層的實(shí)時(shí)通信。首先需要在初始化時(shí)把HANDLER的屬性對象保存起來,先定義兩個(gè)全局變量jobject g_obj = NULL。和JavaVM *g_vm = NULL。然后在JNI執(zhí)行初始化是進(jìn)行環(huán)境變量的保存(*env)GetJavaVM(env,amp。g_vm)。和g_obj= (*env)NewGlobalRef(env,obj)。在更新線程中釋放之前保存的全局變量以便找到JAVA中的對象即對應(yīng)的JAVA數(shù)組并轉(zhuǎn)換上傳,具體操作是:jclass gasdevclazz = (*g_env)GetObjectClass (g_env, g_obj)。 jfieldID fieldID = (*g_env)GetFieldID (g_env, gasdevclazz, flags, [I)。 jflags = (*g_env)GetObjectField (g_env, g_obj,fieldID)。 jclass iclass = (*g_env)GetObjectClass(g_env, g_obj)。 jmethodID methodId = (*g_env)GetMethodID(g_env, iclass, HandlerArray, (I)V)。 在家模式和外出模式的切換由于在出門的時(shí)候用戶經(jīng)常需要關(guān)閉很多的用電器,整合一個(gè)外出模式就能為用戶提供極大的便利。外出系統(tǒng)的主要功能是在用戶切換到外出功能的10秒后,關(guān)閉室內(nèi)的所有可控制用電器并打開所有可用警報(bào)的短信通知。在家模式和外出模式,根據(jù)界面需求,只設(shè)置一個(gè)觸發(fā)動(dòng)作的界面,具體操作是當(dāng)用戶按下外出模式按鈕C語言層接受到觸發(fā)命令,在C語言層通過利用pthread_create創(chuàng)建兩個(gè)線程:第一個(gè)線程首先利用線程分離函數(shù)pthread_detach(pthread_self())進(jìn)行線程的分離,使用sleep(10)等待10秒后,若10秒之內(nèi)判斷到外出模式的標(biāo)志位cflags[3]依然是1,就通過包裝過的驅(qū)動(dòng)界面把用電器關(guān)閉,把標(biāo)志紅外入侵警報(bào)的cflags[4]和標(biāo)志有毒氣體警報(bào)的clags[5]都設(shè)置成短信通知,并把所有存儲(chǔ)用電器狀態(tài)值的cflags中的相關(guān)數(shù)值進(jìn)行刷新,最后關(guān)閉線程;另一個(gè)線程則是負(fù)責(zé)不斷監(jiān)聽RFID,也是先通過分離線程,然后使用while(1)不斷循環(huán),在循環(huán)體內(nèi)打開rfid驅(qū)動(dòng),用if判斷語句當(dāng)識別到用戶綁定的ID卡時(shí)切換為在家模式把紅外警報(bào)和氣體警報(bào)標(biāo)志位置成關(guān)閉狀態(tài),并關(guān)閉線程。工作原理流程圖如31所示。等待10秒用戶點(diǎn)擊切換成外出模式關(guān)閉用電器并打開警報(bào)是否刷正確的ID卡切換成在家模式NY圖31圖31 進(jìn)入安防界面在進(jìn)入安防界面的時(shí)候需要用到RFID卡的認(rèn)證,為上層界面提供了一個(gè)觸發(fā)界面,具體操作是當(dāng)接收到界面?zhèn)鱽淼倪M(jìn)入安防界面動(dòng)作時(shí),在C語言層開辟一個(gè)安防進(jìn)入的線程,利用for循環(huán)輪詢,然后用if語句把存儲(chǔ)有綁定的有效rfid卡ID的cfags[17]與rfid識別到的卡號進(jìn)行比對,當(dāng)一致時(shí)把cfags[6]置成ID卡號表示進(jìn)入安防界面成功,如果在5秒內(nèi)未能識別正確的ID卡號,就把cfags[6]置成1表示進(jìn)入安防界面失敗。如流程圖32所示。NYYN點(diǎn)擊進(jìn)入安防界面彈出刷卡提示是否超過10秒是否識別正確ID卡進(jìn)入安防界面失敗成功進(jìn)入安防界面圖32 鬧 鐘鬧鐘是智能家居中一個(gè)重要的功能,此鬧鐘可以設(shè)定在24小時(shí)內(nèi)使蜂鳴器發(fā)出一次聲響,并且能夠隨時(shí)取消并重新設(shè)置。此界面給上層提供的界面是傳遞一個(gè)字符串,通過算法把字符串提取成數(shù)字并作為設(shè)定時(shí)間。若當(dāng)前時(shí)間和設(shè)定時(shí)間一致則蜂鳴器動(dòng)作。每次判斷蜂鳴器是否動(dòng)作之前都需要先判斷標(biāo)志位,看看用戶是否取消鬧鐘。是的話就停止減少時(shí)間并跳出該段程序。 具體操作是在初始化的時(shí)候先建立好鬧鐘線程(后面會(huì)說到鬧鐘線程還整合了其他功能),然后分離線程,通過time_t tp。和struct tm *s_tm。定義時(shí)間結(jié)構(gòu)體并且通過tp = time(NULL)。和s_tm = localtime(amp。tp)。兩個(gè)函數(shù)取得當(dāng)前時(shí)間,同時(shí)通過以下if語句判斷:if(((cflags[16]/10000)==1)amp。amp。((s_tmtm_hour)==(cflags[16]%10000/100))amp。amp。((s_tmtm_min)==(cflags[16]%100)))其中cflags[16]中,后面四位是表示用戶設(shè)定的時(shí)間和分鐘,第一位是指是否設(shè)定鬧鐘的標(biāo)志位,如果標(biāo)志鬧鐘的clags[16]不為0而當(dāng)前的時(shí)分與用戶設(shè)定的時(shí)分又是一致的話,就直接通過蜂鳴器的包裝驅(qū)動(dòng)設(shè)置蜂鳴器的合適占空比和周期,并持續(xù)動(dòng)作10秒,之后則把鬧鐘標(biāo)志位clags[16]置0。該流程如圖33所示:NYYN用戶輸入一個(gè)字符串串轉(zhuǎn)換成設(shè)定時(shí)間是否取消鬧鐘是否到達(dá)設(shè)定時(shí)間鬧鐘取消蜂鳴器動(dòng)作圖33 燈 光燈光的直接控制就是通過用戶直接點(diǎn)擊上層按鈕,傳到下層直接打開驅(qū)動(dòng)進(jìn)行操作,操作完成后刷新標(biāo)志位??梢悦看慰刂埔粋€(gè)LED燈或者是一次控制所有的LED燈,方便用戶控制。在燈光界面我們給上層界面只需要提供一個(gè)界面,傳進(jìn)來一個(gè)int型數(shù),就可以知道用戶的意圖,通過if語句判斷,當(dāng)傳進(jìn)來的數(shù)是13或者14,我們就把對應(yīng)的房間或者客廳LED燈取反,如果傳進(jìn)來的數(shù)是0,就把所有LED燈關(guān)掉,1則是打開所有的LED燈,在開關(guān)后必須把標(biāo)志燈光狀態(tài)的標(biāo)志位更新。另外,出于環(huán)保的考慮,我們默認(rèn)設(shè)置了,當(dāng)光照值大于4000的時(shí)候,燈光會(huì)自動(dòng)關(guān)閉。 窗 簾 光感監(jiān)控用戶在燈光界面可以看到當(dāng)前的光照值,以便對光感控制窗簾中的光感強(qiáng)度有更具體的概念。由于這個(gè)監(jiān)控也是不需要任何的觸發(fā)動(dòng)作,當(dāng)用戶切換到此頁面是就會(huì)不斷刷新數(shù)值,因此也不提供任何界面,而刷新光感的具體動(dòng)作也是通過同一個(gè)HANDLER不斷地取得在驅(qū)動(dòng)中獲取的當(dāng)前光照值并上傳到上層界面。 控制窗簾在窗簾界面提供直接窗簾的界面,只需要傳遞一個(gè)整數(shù),0的時(shí)候打開,1的時(shí)候關(guān)閉,用戶可以根據(jù)當(dāng)前的光照值設(shè)定當(dāng)光照值大于某設(shè)定值時(shí),窗簾進(jìn)行關(guān)閉動(dòng)作,以及當(dāng)前光照值少于設(shè)定值時(shí),窗簾開啟并屋內(nèi)的燈光。具體操作也是在初始化的時(shí)候就建立并分離線程,用while(1)每隔兩秒判斷一次,我們把預(yù)設(shè)光感值cflags[9]初始值設(shè)為最大值5000,低于設(shè)定值開用語句if((cflags[7]==2)amp。amp。(cflags[8]==0)amp。amp。(cflags[9]cflags[10]))進(jìn)行判斷,高于設(shè)定值關(guān)則用也是用一個(gè)類似的語句來判斷,具體是:if((cflags[7]==1)amp。amp。(cflags[8]==1)amp。amp。(cflags[9]cflags[10])),然后通過描述符操作步進(jìn)電機(jī)的動(dòng)作完成用戶的指令。而直接操作窗簾的線程只在用戶層有指令傳送下來的時(shí)候存在,通過一個(gè)if語句判斷是開還是關(guān),然后直接操作驅(qū)動(dòng),最后刷新標(biāo)志位并關(guān)閉線程。需要注意的是,由于步進(jìn)電機(jī)的特性問題,而打開和關(guān)閉的動(dòng)作也需要轉(zhuǎn)動(dòng)一定的步數(shù),因此在短時(shí)間內(nèi)進(jìn)行打開和關(guān)閉,會(huì)導(dǎo)致步進(jìn)電機(jī)的停止動(dòng)作,為了防止這一情況的發(fā)生,我們規(guī)定,用信號量去加鎖,當(dāng)完成打開或者關(guān)閉動(dòng)作時(shí),再執(zhí)行下一個(gè)動(dòng)作,避免了錯(cuò)誤的發(fā)生。實(shí)際操作是我們在當(dāng)接收到用戶需要操作窗簾時(shí)會(huì)新建并分離一個(gè)線程,用if語句判斷如果進(jìn)行動(dòng)作與窗簾當(dāng)前狀態(tài)一致則不動(dòng)作,或者當(dāng)信號量小于0時(shí),利用sem_trywait()函數(shù)阻塞,直到上一個(gè)動(dòng)作完成為止。光感控制窗簾開關(guān)原理流程圖如圖34所示。用戶設(shè)定光照值和動(dòng)作是否大于/小于設(shè)定值取得當(dāng)前光照值關(guān)閉/打開窗簾圖34YNY 空調(diào)及排氣扇 空調(diào)和排氣扇的直接控制空調(diào)和排氣扇的直接控制是用戶對界面進(jìn)行操作對空調(diào)和排氣扇直接進(jìn)行直接的操作。界面?zhèn)鬟f一個(gè)整形數(shù),分別直接控制空調(diào)和排氣扇的開關(guān)。具體操作是在借口程序里面打開驅(qū)動(dòng)取得表示空調(diào)的LED燈
點(diǎn)擊復(fù)制文檔內(nèi)容
范文總結(jié)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1