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

正文內(nèi)容

基于android的智能家居系統(tǒng)設(shè)計(jì)畢業(yè)論文(編輯修改稿)

2025-07-07 22:28 本頁面
 

【文章內(nèi)容簡(jiǎn)介】 另外光感應(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 的屬性對(duì)象保存起來,先定義兩個(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 中的對(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)。 15 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),每 秒啟動(dòng)一次,用 if 判斷語句當(dāng)識(shí)別到用戶綁定的 ID 卡時(shí)切換為在家模式 把紅外警報(bào)和氣體警報(bào)標(biāo)志位置成關(guān)閉狀態(tài),并關(guān)閉線程。 工作原理流程圖如 31 所示。 16 進(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)輪詢,每次循環(huán)相隔 秒,然后用 if語句把存儲(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 所示。 等待 10 秒 用戶點(diǎn)擊切換成外出模式 關(guān)閉用電器 并打開警報(bào) 是否刷正確的ID 卡 切換成在家模式 圖 31 N Y 17 圖 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í)點(diǎn)擊進(jìn)入安防界面 彈出刷卡提示 是否超過 10 秒 是否識(shí)別正確ID 卡 進(jìn)入安防界面失敗 成功進(jìn)入安防界面 N N Y Y 18 間,同時(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所示 : 圖 33 燈 光 燈光的直接控制就是通過用戶直接點(diǎn)擊上層按鈕,傳到下層直接打開驅(qū)動(dòng)進(jìn)行操作,操作完成后刷新標(biāo)志位??梢悦看慰刂埔粋€(gè) LED 燈或者是一次控制所有用戶輸入一個(gè)字符串串 轉(zhuǎn)換成設(shè)定時(shí)間 是否取消鬧鐘 是否到達(dá)設(shè)定時(shí)間 鬧鐘取消 蜂鳴器動(dòng)作 N N Y Y 19 的 LED 燈,方便用戶控制。 在燈光界面我們給上層界面只需要提供一個(gè)界面,傳進(jìn)來一個(gè) int 型數(shù),就可以知道用戶的意圖,通過 if 語句判斷,當(dāng)傳進(jìn)來的數(shù)是 13或者 14,我們就把對(duì)應(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)前的光照值,以便對(duì)光感控制窗簾中的光感強(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) 20 一定的步數(shù),因此在短時(shí)間內(nèi)進(jìn)行打開和關(guān)閉,會(huì)導(dǎo)致步進(jìn)電機(jī)的停止動(dòng)作,為了防止這一情況的發(fā)生,我們規(guī)定,用信號(hào)量去加鎖,當(dāng)完成打開或者關(guān)閉動(dòng)作時(shí),再執(zhí)行下一個(gè)動(dòng)作,避免了錯(cuò)誤的發(fā)生。 實(shí)際操作是我們?cè)诋?dāng)接收到用戶需要操作窗簾時(shí)會(huì)新建并分離一個(gè)線程 ,用if 語句判斷如果進(jìn)行動(dòng)作與窗簾當(dāng)前狀態(tài)一致則不動(dòng)作,或者當(dāng)信號(hào)量小于 0時(shí),利用 sem_trywait()函數(shù)阻塞,直到上一個(gè)動(dòng)作完成為止。 光感控制窗簾開關(guān)原理流程圖如圖 34所示。 21 空調(diào)及排氣扇 空調(diào)和排氣扇的直接控制 空調(diào)和排氣扇的直接控制是用戶對(duì)界面進(jìn)行操作對(duì)空調(diào)和排氣扇直接進(jìn)行直接的操作。界面?zhèn)鬟f一個(gè)整形數(shù),分別直接控制空調(diào)和排氣扇的開關(guān)。 具體操作是在借口程序里面打開驅(qū)動(dòng)取得表示空調(diào)的 LED燈和直流電機(jī)的描述符,然后通過一個(gè) switch 語句判斷用戶動(dòng)作并執(zhí)行, 最后回收描述符。 溫度控制空調(diào) 用戶通過設(shè)定一個(gè)溫度,當(dāng)當(dāng)前溫度高于用戶所設(shè)溫度的時(shí)候空調(diào)自動(dòng)打開。監(jiān)控程序依附在 handler 刷新上傳 flags 的線程中,而設(shè)定的值則在接口程用戶設(shè)定光照值和動(dòng)作 是否大于 /小于設(shè)定值 取得當(dāng)前光照值 關(guān)閉 /打開窗簾 N Y Y 圖 34 22 序里面通過 cflags[15]來設(shè)定,然后不斷用 if((cflags[15]/100 !=0)amp。amp。 (cflags[15]%100 cflags[1]))循環(huán)比對(duì),當(dāng)符合則打開標(biāo)志空調(diào)的 LED 燈。 流程圖如圖 35所示。 短信控制空調(diào) 短信控制空調(diào)可以通過綁定的號(hào)碼給本機(jī)發(fā)送短信對(duì)空調(diào)進(jìn)行控制,通 過GPRS 模塊接收短信,在初始化的時(shí)候開辟并分離一條用于接收短信的線程,用while(1)不斷循環(huán),當(dāng)識(shí)別到號(hào)碼是綁定號(hào)碼時(shí)對(duì)字符串進(jìn)行解析,短信控制打開空調(diào)的命令是“ openair”,用 if(strcmp(gprs_mesbuf[2],openair)==0)判斷本機(jī)接收到信號(hào),操作驅(qū)動(dòng)點(diǎn)亮表示空調(diào)的 LED 燈,并把空調(diào)開關(guān)的標(biāo)志位cflags[11]更改為開,最后給回復(fù)綁定號(hào)碼一條短信,內(nèi)容為:“ openair ok?!? 用戶設(shè)定溫度 是否大于 設(shè)定值 取得當(dāng)前溫度值 打開空調(diào) N Y 圖 35 23 安 防 警報(bào) 紅外入侵警報(bào)是通過打開紅外傳感器,當(dāng)有物 體遮擋時(shí)進(jìn)行用戶要求的動(dòng)作,如蜂鳴器警報(bào)和短信警報(bào)。 煙霧警報(bào)是通過打開煙霧傳感器,當(dāng)有物體遮擋時(shí)進(jìn)行用戶要求的動(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)。通過 switch 語句分別判斷情況,分別是紅外和煙霧警報(bào)的短信、蜂鳴器警報(bào)或者取消警報(bào)。當(dāng)接受到打開警報(bào)的指令,會(huì)改變標(biāo)志位令線程里的該段程序生效。 前面我們說過,為了節(jié)省資源,我們把警報(bào)的工作 也同樣放到鬧鐘的線程里面,其中用 if(((cflags[4]!=0)||(cflags[5]!=0))amp。amp。((k=3000)||(j==0)))這一判斷語句判斷是否打開了蜂鳴器警報(bào)并打開蜂鳴器的驅(qū)動(dòng)接口,在其中又有兩個(gè)判斷語句 if((j==0)amp。amp。(cflags[4]!=0))和 if((k=3000)amp。amp。(cflags[5]!=0))分別用來判斷硬件的狀態(tài),當(dāng)接受到信號(hào)時(shí)蜂鳴器動(dòng)作。而短信警報(bào)則需要用if((k=3000)amp。amp。(cflags[5]==2)amp。amp。((cflags[18]/10000)=3600 )) 和if((j==0)amp。amp。(cflags[4]==2)amp。amp。((cflags[18]%10000)=3600 ))來分別判斷是否觸發(fā)短信警報(bào),而每?jī)纱蜗嗤愋偷亩滔⒕瘓?bào),我們也有兩個(gè)判斷體去控制最少間隔 10 分鐘才會(huì)再次觸發(fā)警報(bào)以免短信的費(fèi)用過高。 切換識(shí)別 ID 卡以及電話號(hào)碼 切換綁定號(hào)碼會(huì)把原來保存的電話號(hào)碼清除并更新為用戶輸入的新號(hào)碼,以在需要發(fā)短信的時(shí)候使用。提供的界面會(huì)在上層界面接受一個(gè)字符串,只需通過memset()清空字符串和 strcpy()復(fù)制字符串兩個(gè)函數(shù)就可以直接把電 話號(hào)碼的字符串內(nèi)容替換掉。 RFID 卡的切換,需要在 10秒內(nèi)將有效的新卡放到 RFID 傳感器上,當(dāng)切換成功時(shí)會(huì)有文字框提示。操作是首先在接口程序創(chuàng)建一個(gè)換卡的線程,打開 RFID驅(qū)動(dòng)用 dowhile 循環(huán) 5 次,當(dāng)識(shí)別到有效的新 ID卡替換掉掉舊的 cflags[17]儲(chǔ)存的 ID 卡號(hào),并把標(biāo)志換卡狀態(tài)的 cflags[19]置位成表示成功的 2
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1