Ir ao conteúdo
  • Cadastre-se

ThigerX

Membro Júnior
  • Posts

    3
  • Cadastrado em

  • Última visita

posts postados por ThigerX

  1. 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.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!