Estou tentando desenvolver essa programação abaixo e estou usando um modulo controle remoto que envia código hexadecimal, meu problema é o seguinte:
Na parte do while (armazenavalor == 0xFF42BD && armazenavalor != 0xFF4AB5)
que fica mudando os leds em um loop o programa fica agarrado, eu criei um Statement if (armazenavalor == 0xFF4AB5) para poder desligar todos os leds e cancelar o loop do While mas acontece que quando a variável armazenavalor é igual a 0xFF42BD logicamente o arduino entra em loop ligando e desligando os leds na ordem porem quando eu envio o valor 0xFF4AB5 para tentar parar o loop e desligar os leds que estiverem acessos simplesmente não funciona ele continua em loop.
Alguém pode me ajudar?
Grato desde já
Código completo:
#include <IRremote.h>
int RECV_PIN = 11;
float armazenavalor;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
digitalWrite(10, HIGH); // if no remote command received keep relay state off
digitalWrite(9, HIGH); // if no remote command received keep relay state off
digitalWrite(8, HIGH); // if no remote command received keep relay state off
digitalWrite(7, HIGH); // if no remote command received keep relay state off
Serial.begin(9600);
irrecv.enableIRIn(); // Intitialize IR receiver
}
void loop()
{
if (irrecv.decode(&results))
{
Serial.print("Valor lido : ");
Serial.println(results.value, HEX);
armazenavalor = (results.value);
if (armazenavalor == 0xFF6897) //Enable PIN 10
{
delay(500);
digitalWrite(10, LOW); //Enable PIN 10
}
if (armazenavalor == 0xFF9867) //Enable PIN 9
{
delay(500);
digitalWrite(9, LOW); //Enable PIN 9
}
if (armazenavalor == 0xFFB04F) //Enable PIN 8
{
delay(500);
digitalWrite(8, LOW); //Enable PIN 8
}
if (armazenavalor == 0xFF629D) //Enable PIN 7 (PUMP)
{
delay(500);
digitalWrite(7, LOW); //Enable PIN 7 (PUMP)
}
if (armazenavalor == 0xFFA857) //Enable PIN 7 (PUMP)
{
delay(500);
digitalWrite(7, HIGH); //Enable PIN 7 (PUMP)
}
if (armazenavalor == 0xFF4AB5) //shutdown all leds
{
delay(500);
digitalWrite(10, HIGH); // Desable PIN 10
digitalWrite(9, HIGH); // Desable PIN 9
digitalWrite(8, HIGH); // Desable PIN 8
}
while (armazenavalor == 0xFF42BD && armazenavalor != 0xFF4AB5) //random led colours
{
digitalWrite(10, LOW); // Enable PIN 10
delay(2000);
digitalWrite(10, HIGH); // Desable PIN 10
digitalWrite(9, LOW); // Enable PIN 9
delay(2000);
digitalWrite(9, HIGH); // Desable PIN 9
digitalWrite(8, LOW); // Enable PIN 8
delay(2000);
digitalWrite(8, HIGH); // Desable PIN 8
}
irrecv.resume(); //Read next value
}
}