目前程式碼是這樣:
#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值的鍵結束時
發現就卡在迴圈 也無法再接收紅外線訊息 請教一下大神們哪邊需要修改
虛心受教
所以你在後面的程式才可以用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當中
內文搜尋

X