1. 程式人生 > >《智能家居》培訓第六天------2019-01-10

《智能家居》培訓第六天------2019-01-10

一個 沒有 -h 補充 在屏幕上 技術分享 很多 流水燈 點燈

目錄:

  一)攝像頭

  二)照明

  三)所想

  四)總結

一)攝像頭

  攝像頭這塊學了跟沒學一樣我覺得,攝像頭給的api,yuyv轉rgb24也是給的api,總而言之就是,直接給了兩個源文件,這兩個源文件已經實現了屏幕顯示攝像頭數據的這個功能,我們所做的就只是把這兩個文件和main文件整合,攝像頭是怎麽獲得數據怎麽傳輸數據,數據如何通過什麽方式顯示在屏幕上這些重點的都沒詳細講,只是粗略講了一下這個過程,不過這也正常,看了一下老師的源碼,涉及到的東西確實很多,不覺得這是幾天可以搞定的東西,而這可以說是本次培訓的最後一天了。

  那麽這篇筆記該怎麽寫呢,如何實現的肯定是沒法寫的了,我也不懂,就只記錄目前知道的東西吧

  1)老師的筆記圖

技術分享圖片

  2)V4L2

  V4L2是linux系統中的一個關於處理視頻這一塊的一個開發框架,一個處理視頻數據的機制,目前我還沒有開始學習這個框架

  點擊此鏈接學習V4L2

  3)過程遇到的問題

  ① 問題:顯示攝像頭界面與菜單欄的點擊無法同時實現,就是希望進入攝像界面以後點擊返回可以返回主界面,再進入攝像界面依然可以顯示攝像頭內容

  ② 解決方法:有了之前解決視頻菜單欄無法顯示的經驗,容易想到這個問題也可以使用線程來解決

  ③ 實現:我希望我的main.c文件盡量簡潔,其中代碼盡量少盡量清晰,我整合了很久代碼,希望最終可以只是在main裏添加一個顯示攝像頭的子線程,而把其他什麽打開設備、緩存幀、yuyv轉rgb24等顯示攝像頭內容之前需要進行的操作獨立成一個文件,但是無論我怎麽嘗試,都無法實現預期,幾個小時後,我妥協了,直接把攝像這一塊的代碼全部移植到main裏,yuyv轉rgb24為單獨一個文件,這就解決問題了,但是我的main.c也變得繁瑣起來了。以下是攝像界面圖,圖一是攝像頭打開前顯示的畫面:

技術分享圖片技術分享圖片

二)照明

  其實就是點燈,這個就不詳寫了,直接給代碼吧

技術分享圖片
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <fcntl.h>
 4 #include <linux/ioctl.h>
 5 
 6 #define GEC210_LED_ON    _IOW(‘A‘, 0x03, unsigned long) 
 7 #define GEC210_LED_OFF    _IOW(‘A‘, 0x04, unsigned long)
 8 int light(void)
 9 {
10     int
fd_light; 11 fd_light = open("/dev/led_drv", O_RDONLY);//以只讀的方式LED的驅動,這個驅動文件要先安裝,用老師給的驅動文件led_drv.ko 12 if(fd_light < 0) 13 { 14 perror("open"); 15 return -1; 16 } 17 //在此基礎上實現流水燈的效果 18 while(1) 19 { 20 ioctl(fd_light, GEC210_LED_ON, 4); //點亮第4個燈 21 sleep(1); 22 ioctl(fd_light, GEC210_LED_OFF, 4); //關閉第4個燈 23 sleep(1); 24 } 25 close(fd_light); 26 return 0; 27 }
led.c

三)所想

  1)沒什麽想的今天,就感覺沒學到什麽東西,希望自己可以抽空學習一下V4L2這個東西,如果學了的話到時候再補充這篇筆記

四)總結

   1)實現了攝像頭的功能,解決的菜單欄的問題

  2)菜單欄的拍照拍攝功能沒有實現

  3)學習了點燈

  4)第七天就不單獨寫筆記了,因為第七天沒學新東西,項目驗收而已,我在第七天嘗試了實現拍照功能,但是失敗了,的確可以生成一張jpg圖片,但是這張圖片沒有數據,問了一下老師,說是在數據寫入的時候出現了問題,測試了一下發現不是數據寫入的問題,而是使用read函數讀取屏幕信息的時候就失敗了,嘗試了半天,read依然返回-1,也就是依然失敗,最後放棄了。

《智能家居》培訓第六天------2019-01-10