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

正文內(nèi)容

基于android的智能家居系統(tǒng)設(shè)計(jì)c語(yǔ)言功能模塊及部分驅(qū)動(dòng)畢業(yè)論文-文庫(kù)吧

2025-06-11 13:18 本頁(yè)面


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