Boa noite.
Estou tentando escrever um firmware para controle de uma luminária usando um controle remoto IR, porém estou com dificuldade para implementar a leitura do controle quando acionado através de uma interrupção, pois se implementado no loop principal a função para a leitura do controle, esta pode acabar não ler o sinal do controle, uma vez que no loop principal possui o restante do código. Segue o código para teste:
// Programa : Teste Controle Remoto IR
//1 - FFA25D
//2 - FF629D
//3 - FFE21D
//4 - FF22DD
//5 - FF02FD
//6 - FFC23D
//7 - FFE01F
//8 - FFA857
//9 - FF906F
//0 - FF9867
//* - FF6897
//# - FFB04F
//
//cima - FF18E7
//esquerda - FF10EF
//baixo - FF4AB5
//direita - FF5AA5
//ok - FF38C7
#include <IRremote.h>
int RECV_PIN = 3;
int tecla;
IRrecv irrecv(RECV_PIN);
decode_results results;
void Controle_IR(){
Serial.println("Desativado Interrupção");
detachInterrupt(digitalPinToInterrupt(3));
if (irrecv.decode(&results)){
Serial.print("Valor lido : ");
Serial.println(results.value, HEX);
irrecv.resume();
Serial.print("Tecla: ");
tecla = results.value;
switch (tecla) {
case 0xFF9867:
Serial.println("0");
break;
case 0xFFA25D:
Serial.println("1");
break;
case 0xFF629D:
Serial.println("2");
break;
case 0xFFE21D:
Serial.println("3");
break;
case 0xFF22DD:
Serial.println("4");
break;
case 0xFF02FD:
Serial.println("5");
break;
case 0xFFC23D:
Serial.println("6");
break;
case 0xFFE01F:
Serial.println("7");
break;
case 0xFFA857:
Serial.println("8");
break;
case 0xFF906F:
Serial.println("9");
break;
case 0xFF6897:
Serial.println("*");
break;
case 0xFFB04F:
Serial.println("#");
break;
case 0xFF18E7:
Serial.println("Cima");
break;
case 0xFF10EF:
Serial.println("Esquerda");
break;
case 0xFF4AB5:
Serial.println("Baixo");
break;
case 0xFF5AA5:
Serial.println("Direita");
break;
case 0xFF38C7:
Serial.println("OK");
break;
}
}
Serial.println("Ativada Interrupção");
attachInterrupt(digitalPinToInterrupt(3), Controle_IR,FALLING);
}
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Inicializa o receptor IR
pinMode(3, INPUT);
attachInterrupt(digitalPinToInterrupt(3),Controle_IR,FALLING);
}
void loop()
{
Serial.println(".");
delay(1000);
}
Se alguém tiver uma ideia para resolver este problema ou até mesmo outro tipo de solução ficaria muito agradecido.