Prism

2019年7月14日 星期日

冷氣機紅外線遙控訊號連動 - 03 紅外線接收程式測試

< 本文請勿轉載,謝謝 ! >

※ 2019.8 後補「積木式免焊接 記憶型空調紅外線轉譯器」一文,可供快速製作成品

紅外線接收程式測試


使用 Arduino IDE 內含之 IRremote程式庫 進行測試

IRremote 程式庫在本類別 01 篇中已安裝好,請執行桌面上的Arduino應用程式,點選視窗左上 檔案->開啟,讀取程式庫中的範例檔 IRrecvDumpV2.ino ( 範例檔案位置在「文件」下的Arduino\libraries\IRremote\examples\IRrecvDumpV2\IRrecvDumpV2.ino )

請將第9行改為 int recvPin = 2;  (麵包板的紅外線接收器腳位 Out , 接在編號 2的腳位)
// Tell IRremote which Arduino pin is connected to the IR Receiver (TSOP4838)
//
int recvPin = 2;
IRrecv irrecv(recvPin);

執行 "驗證/編譯" 本程式
下方黑色顯示視窗捲動時發現有警告訊息,使用記事本程式 (或建議使用 Notepad++ 程式) 修改有問題的 IRremote.cpp 檔案內容 (檔案位置在「文件」下的Arduino\libraries\IRremote 目錄),有相同的三段程式碼要修改,各在107、81、56 行,原始碼為
  if (passed)
    DBG_PRINTLN(F("?; passed"));
  else
    DBG_PRINTLN(F("?; FAILED")); 

修改為
#if DEBUG    
  if (passed)
    DBG_PRINTLN(F("?; passed"));
  else
    DBG_PRINTLN(F("?; FAILED")); 
#endif

存檔後再重新編譯,無問題後執行 "上傳" ,將程式碼寫入 Arduino 開發板內。

打開 序列埠監控視窗,先拿一般電視遙控器對準紅外線接收器測試,有正確抓到編碼解碼,接收線路及接收程式測試正常

使用冷氣機遙控器測試時出現了 紅外線編碼太長 的問題,需要修正檔案

使用記事本程式修改有問題的 IRremoteInt.h 檔案內容 (檔案位置在「文件」下的Arduino\libraries\IRremote 目錄),修改43、52 行,加大能接收的訊號長度,程式碼修正如下
#define RAWBUF  400      //加大紅外線編碼取樣個數
int          rawlen;                 //編碼取樣個數的計數超過255,型態改為 int 整數,可計數至 32767
//------------------------------------------------------------------------------
// Information for the Interrupt Service Routine
//
#define RAWBUF  400  // Maximum length of raw duration buffer   修正為 400

typedef
 struct {
 // The fields are ordered to reduce memory over caused by struct-padding
 uint8_t       rcvstate;        // State Machine state
 uint8_t       recvpin;         // Pin connected to IR data from detector
 uint8_t       blinkpin;
 uint8_t       blinkflag;       // true -> enable blinking of pin on IR processing
 int       rawlen;          // counter of entries in rawbuf  修改型態為 int
 unsigned int  timer;           // State timer, counts 50uS ticks.
 unsigned int  rawbuf[RAWBUF];  // raw data
 uint8_t       overflow;        // Raw buffer overflow occurred
 }
irparams_t;

存檔後再重新 編譯、上傳,將程式碼寫入 Arduino 開發板內。
我家中的冷氣遙控器紅外線編碼取樣個數為 291個,使用手機上的 遙控精靈APP 選擇日立空調機型,取樣個數為 371 個,比程式庫預設的長度 RAWBUF 101 個多出不少,也超過一個 Byte 能計數的大小 255個,而如日立冷氣的紅外線編碼資料大小就要 371 X 32 bits(unsigned int) / 8 = 1484 Bytes,Arduino開發板內建的記憶體空間才 2048 Bytes,這樣會不太夠用吧...

實驗到這裏,覺得這是否就是小米萬能遙控器不能成功完整複製冷氣機紅外線編碼的類似原因...

接下來測試發射錄製到的紅外線信號是否可正常動作,複製視窗中最下方的一行陣列參數 ( unsigned int rawData[ ... ) ,拿來測試紅外信號線發射。

接下來進行紅外線發射程式測試...

冷氣機紅外線遙控訊號連動 - 04 紅外線發射程式測試