|
发表于 2018-2-25 00:02:38
|
显示全部楼层
接收信號→解碼→依解碼結果判斷輸入信號是哪個按鍵→
啟動相對應的處理程式來處理→繼續接收信號→解碼...
我的做法大多是依解碼的結果,用 switch + case 來進行對應
處理,以下紅外線處理程式片段截取自我自己做的 lcd 時鐘:
#include <IRremote.h> //外掛紅外線遙控
#define IR_PIN 5 //定義紅外線訊號腳位為 pin 5
//使用 JVC 汽車音響遙控器 RM-RK25,定義如下(用範例程式自己抓解碼結果):
#define PB_ATT 0x95B38CA //[ATT]等同一般按鍵[ADJ]背光切換功能
#define PB_FUNC 0x102C9C72 //[FUNC]等同一般按鍵[MODE]選擇功能
#define PB_DISC+ 0xAB438224 //未使用
#define PB_DISC- 0x80E8470 //未使用
#define PB_UP 0x69118A0 //未使用
#define PB_DOWN 0x1FDD666E //未使用
#define PB_V_DN 0x19130F62 //[-]等同一般按鍵[ADJ]調整功能,但往回調
#define PB_V_UP 0xBC480D16 //[+]等同一般按鍵[ADJ]往前調的調整功能
#define PB_HOLD 0xFFFFFFFF //持續按住的編碼,不使用
unsigned long DECODE = 0; //存放紅外線解碼結果
IRrecv irrecv( IR_PIN ); //紅外線函式宣告
decode_results results;
void setup()
{
irrecv.blink13( true ); //設為true的話,當收到訊號時,腳位13的LED便會閃爍
irrecv.enableIRIn(); //啟動接收器
}
//主程式
void loop()
{
//檢查紅外線接收
if ( irrecv.decode( &results ) ) //若有接收到信號
{
DECODE = results.value; //取得編碼
//紅外線按鈕處理
switch ( DECODE )
{
case PB_ATT: //若按下[ATT]鈕
if ( BACK_LIGHT ) //若背光已開啟
lcd.noBacklight(); //關閉背光
else
lcd.backlight(); //否則開啟背光
BACK_LIGHT = !BACK_LIGHT; //背光旗標互換
break;
case PB_FUNC: //若按下[FUNC]鈕
mode_change();
break;
case PB_V_UP:
adj_push( 1 );
break;
case PB_V_DN:
adj_push( -1 );
break;
}
irrecv.resume(); //接收下一筆資料
}
} |
|