2017-02-05 25 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); 
}