arduino 紅外線遙控器控制LED閃爍

目前程式碼是這樣:
#include <IRremote.h>
IRrecv irrecv(6);
decode_results results;
void setup()
{
Serial.begin(9600);
Serial.println("Enabling IRin");
irrecv.enableIRIn(); // Start the receiver
Serial.println("Enabled IRin");
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(10,OUTPUT);
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value);
if (results.value==16724175) { //開關大燈
digitalWrite(10,!digitalRead(10));
}
if (results.value== 16718055) { //開關遠燈
digitalWrite(11,!digitalRead(11));
}
while (results.value==16743045){ //開關駐車燈
digitalWrite(12,HIGH);
delay(400);
digitalWrite(12,LOW);
delay(400);
if (results.value==16716015){
break;
}

}



irrecv.resume();

}
delay(200);
}

想要用紅外線遙控器 控制自己加裝LED的模型車上
問題:
開關駐車燈 按16743045對應按鍵時 確實可以讓LED閃爍,但是我想要再按16716015值的鍵結束時
發現就卡在迴圈 也無法再接收紅外線訊息 請教一下大神們哪邊需要修改
虛心受教

2018-01-29 1:45 發佈
看起來是像是你在收到駐車燈開啟後的那個loop沒有再去呼叫 IR decode function來接收關閉的IRkey
所以程式卡在你收到駐車燈IRkey那個loop裡面

irrecv.resume();

不是指繼續接收紅外線的意思嗎,他是放在駐車燈的迴圈外面

我試了把它放在while裡面也是沒反應

還是break的條件沒有辦法成立 因為都沒辦法接都收到值 更不可能因為收到值而跳出呢


irrecv.decode(&results) 是將收到的IR key解碼後,將解碼結果放至results的變數內
所以你在後面的程式才可以用results.value去判斷哪一個按鍵被按下了

前面兩個開關之所以沒有問題是因為你只有做的單純的on跟off
而駐車燈的部分,你用了一個while迴圈,而while迴圈所判斷的數據是irrecv.decode(&results)的結果
看到這邊有沒有覺得哪邊怪怪的
在整個迴圈中並沒有地方再去更新results.value的值,所以while的判斷是當然永遠為true,if的結果永遠為false
所以你的程式會讓駐車燈閃爍 但是卻離不開那個迴圈
所以也就沒有辦法run到irrecv.resume()

如果你只是單純的把resume跟decode搬到while內,那會造成另外一個問題
就是你原本的大燈開關on/off出問題

至於該怎麼解,個人會建議利用flag跟counter的方式去實現駐車燈閃爍的功能
讓irrecv回到原本的main loop當中
謝謝eric大的回覆
那我再研究一下flag跟counter的使用方法
謝謝了!!
有壞掉嗎
shuang86178 wrote:
目前程式碼是這樣:...(恕刪)
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?