lirc紅外學習irrecord

2021-06-28 01:08:39 字數 1558 閱讀 7290

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,占空...