2017-02-05 51 views
0

我目前正在Arduino Uno上執行一個項目。該項目基於從紅外遙控器接收紅外信號,然後根據收到的信號執行其他操作。存儲先前讀取的值直到出現新脈衝

問題是每次都會重置信號。我想存儲從紅外遙控器接收到的值,然後在檢測到另一個脈衝時將其復位。

這裏是我的代碼:

int brojac = 0; 
int pinData = 10; 
unsigned long lengthHeader; 
unsigned long bit; 
int byteValue; 
int vrime = 1000 ; 
int storeValue = 0; 

void setup() 
{ 
Serial.begin(9600); 
pinMode(pinData, INPUT); 

} 

void loop() { 
lengthHeader = pulseIn(pinData, LOW); 
if (lengthHeader > 1500) 
{ 
    for (int i = 1; i <= 32; i++) { 
    bit = pulseIn(pinData, HIGH); 

    if (i > 16 && i <= 24) 
     if (bit > 1000) 
     byteValue = byteValue + (1 << (i - 17)); 
    } 
} 
Serial.print("byteValue = "); 
Serial.println(byteValue); 
if(byteValue == 66){ 
    digitalWrite(11,HIGH); 
} 
else{ 
    digitalWrite(11,LOW); 
} 
delay(vrime); 
byteValue = 0; 
delay(250); 

}

+1

任何你沒有使用** Arduino IRremote **庫的理由? –

+0

我沒有使用Arduino IRremote,因爲它與ATTiny45不兼容。 ATtiny不使用定時器2,這就是爲什麼它不能使用,除非修改。 – Shaam

+0

定時器可以改變zif需要 –

回答

0

我,直到檢測到新的變量存放在變量值得到了答案。

int pinData = 10; 
int led = 11; 
unsigned long lengthHeader; 
unsigned long bit; 
int byteValue; 
int storeValue = 0; 
int previousValue = 0; 

void setup() 
{ 
    Serial.begin(9600); 
    pinMode(pinData, INPUT); 
    pinMode(led, LOW); 
} 

void loop() { 
    lengthHeader = pulseIn(pinData, LOW); 
    if (lengthHeader > 1500) 
    { 
    for (int i = 1; i <= 32; i++) { 
     bit = pulseIn(pinData, HIGH); 

     if (i > 16 && i <= 24) 
     if (bit > 1000) 
      byteValue = byteValue + (1 << (i - 17)); 
    } 
    } 
Serial.print("byteValue = "); 
Serial.println(byteValue); 

    **storeValue = byteValue; 
    if (storeValue != 0){ 
    previousValue = storeValue; 
    } 

    Serial.print("Previous value = "); 
    Serial.println(previousValue);** 
    byteValue = 0; 
    delay(500); 
}