lirc version:0.9.2
1、檢視是否存在當前遙控器的模板
fin = fopen(filename, "r");
if (fin != null)
2、設定紅外裝置為接收模式(只有接收模式支援lirc_mode_mode2或者lirc_mode_lirccode的裝置才可以學習紅外碼)。
lirc_mode_mode2:裝置驅動本身不支援解碼功能,只能讀取紅外的脈衝資料流。
lirc_mode_lirccode:裝置驅動本身指定了某種型別的紅外碼特性
下面按照常見的lirc_mode_mode2來分析。
3、呼叫get_lengths()獲取紅外遙控碼的特性,也是最為關鍵的一步。
先介紹一下struct ir_remote結構體的部分成員:
gap:兩個紅外碼之間的間隔
repeat_gap:重複碼間隔
toggle_bit_mask:切換bit(用於變碼,如rc6)
struct lengths結構體,struct lengths用於鍊錶記錄連續紅外脈衝:
lengths.sum為相同脈寬長度總和
lengths.count為相同脈寬個數
lengths.max為最大脈寬
lengths.min為最小脈寬
lengths.upper_bounder和lower_bounder為是否為相同脈衝的上下邊界
get_lengths()首先會找到紅外碼之間的間隔,即gap。找到gap之後開始採集紅外碼的特徵,包括下面一些變數:
first_repeatp:第乙個重複碼pulse
first_repeats:第乙個重複碼space
first_trail:重複碼結束脈寬
first_repeat_gap:重複碼間隔
first_headerp:頭碼pulse
first_headers:頭碼space
first_space:資料段的第乙個space
first_pulse:資料段的第乙個pulse
在獲取紅外的資料特徵之後,get_lengths()呼叫
void get_scheme(struct ir_remote *remote, int interactive)
函式來分析紅外的協議,目前支援rc5,rc6,raw_code,space_enc四種。
get_lengths()通過獲取到上面的取樣值計算出一下幾個紅外特徵值:
- 獲取紅外碼之間的間隔gap
- 獲取紅外碼的起始標記header
- 獲取重複碼repeat,重複碼間隔
- 獲取結束碼(opt)
- 獲取資料長度(用pulse和space的值表示0和1)
若紅外碼為rc6碼則需要通過
int get_toggle_bit_mask(struct ir_remote *remote)
函式獲取toggle_bit_mask。到這裡紅外碼特徵獲取已經結束。
4、開始記錄按鍵碼值和生成檔案。
微控制器學習筆記 紅外測試
一 原理圖 上面為紅外置受原理圖,下面為紅外發射原理圖 引腳 發射ir t p3.5 接收ir r p3.6 原理 當紅外置收感測器接收到38khz的紅外脈衝時,返回乙個低電平 二 設計目標和思路 目標 需要兩個電路板,乙個電路板用於傳送,另乙個用於接收。按下key1每100毫秒傳送紅外訊號一次。接...
我談學習型紅外遙控(一)
跟著專案組長一起做了幾個空鼠專案,一直覺得自己長勁不大,因為自己只負責簡單的鍵盤定義部分,最終的整個軟體架構其實自己都不太了解。從去年11月份開始,一直都很忙,乙個接著乙個做,我的任務也只是鍵盤部分。重複的做一樣東西,感覺挺沒勁的!由於產品設計需要,我們要做學習型的遙控器。於是,這項任務就落在了我的...
學習型通用紅外遙控裝置(一)
1.1處理器 處理器為stm32,在其兩個系列的cpu上除錯通過,為stm32f103zet和stm32f103vbt。軟體平台 keil uvision4 電路設計 altium designer v6.9。1.2紅外通訊技術理論及示波器驗證 nec 標準規定,紅外通訊的載波頻率為38khz,占空...