|
发表于 2018-1-1 15:13:05
|
显示全部楼层
最近重做了一個音響遙控器,因為有多餘用不到的按鍵,就想將
它們用在房間冷氣上,無奈就是解不出它的編碼,本來作罷了,
爬文爬到這篇又燃起一絲希望,試了幾次,最後竟然成功了!
我的冷氣是 FUJITSU 的,因為相關功能都需搭配遙控器上的
液晶面板使用,我只整合了開機、關機這二個功能在音響遙
控器上,開機 RAW[259],關機 RAW[115],以 IRrecvDumpV2
程式 DUMP 出來的資料可直接使用,不需再將第一筆往最後移
不過追加後因為編碼資料量過多造成無法組譯,只能將資料
以 PROGMEM 的方式放到 FLASH 裏,要使用時再讀取,舉個
按鍵為例子:
#define KHZ 38 //38KHZ 頻率為紅外線通訊常用協定
const int PROGMEM PB_POWER[] = {17, 850,900, 1750,1750, 1800,1800, 1700,1800, 1700,950, 850,1750, 900,900, 1750,900, 800}; //紅外線編碼 raw 資料,資料數追加在第一筆
int CODE_BUFFER[260]; //編碼資料暫存區:從編碼資料表格中讀取並暫存欲使用資料
void send_signal( const int *DATA_PTR,const int CODE_NUMBERS )
{
int SIZE = sizeof( CODE_NUMBERS ); //計算 int 使用的位元組數(兼容性考量,亦可直接指定 4 )
memcpy_P( CODE_BUFFER, DATA_PTR, CODE_NUMBERS*SIZE ); //從程式記憶體拷貝資料到變數陣列中
irsend.sendRaw( CODE_BUFFER, CODE_NUMBERS, KHZ ); //傳送紅外線資料
TIMER = millis(); //記錄最後有效按鍵處理後的時間
delay(10); //最快每 0.01 秒重傳一次(接點彈跳不處理,由音響端負責過濾)
}
void loop() 中判讀按鍵再發送相對應的信號(其他程式略過):
send_signal( PB_POWER+1, PB_POWER[0] ); //呼叫發送音響開/關機信號
提供同好作為參考,也感謝樓主的分享 |
|