[Dúvida] Recebimento e envio de infra-vermelho.

Pessoal estou com um probleminha aqui, estou tentando controlar meu receptor da tv pelo arduino, só que ele depois que envia o sinal não recebe mais, vou postar o código pra vcs verem como esta!

#include <IRremote.h>
#include <IRremoteInt.h>

#define power 0xFFA25D
#define t0  0xFF6897
#define t1    0xFF30CF
#define t2  0xFF18E7
#define t3  0xFF7A85
#define t4 0xFF10EF
#define t5  0xFF38C7
#define t6 0xFF5AA5
#define t7 0xFF42BD
#define t8 0xFF4AB5
#define t9 0xFF52AD
#define next 0xFFC23D
#define back 0xFF02FD
#define vol1 0xFF906F
#define vol2 0xFFA857
#define mode 0xFF629D

#define RECV_PIN 11




decode_results resCtrl;

IRsend irsend;
IRrecv cRecpIR(RECV_PIN);

void setup()
{
  cRecpIR.enableIRIn(); //habilita receptor IR
  Serial.begin(9600);
  pinMode(RECV_PIN, INPUT);
  cRecpIR.blink13(true);


}

void loop(){

  if (cRecpIR.decode(&resCtrl)){
    switch (resCtrl.value){
    case power:
      irsend.sendNEC(0x8076807F, 32);
      break;
    case next:
      irsend.sendNEC(0x807620DF, 32);
      break;
      default:
      Serial.println("Nada");
      break;
    }
        cRecpIR.resume();
  }
}

aurino123

Eu usei essa lib sem problemas, também usei envio seguido do recebimento, porem em blocos distintos.

Estou sem o arduino agora, então não posso testar, mas tenta colocar o resume do receiver antes de usar o send (que desabilita o timer se bem me lembro):

void loop(){

  if (cRecpIR.decode(&resCtrl)){
    cRecpIR.resume(); //como já decodificou pode voltar o status para Idle
    
    switch (resCtrl.value){
    case power:
      irsend.sendNEC(0x8076807F, 32);
      break;
    case next:
      irsend.sendNEC(0x807620DF, 32);
      break;
    default:
      Serial.println("Nada");
      break;
    }
  }
}

Mortis
cara não deu certo continua do mesmo jeito! =(
o interessante é que nesse default, que não envia nada fica livre, ele recebe mais teclas, mas depois que envia o comando num recebe mais nada!
mas obrigado pela atenção!

Cara, mil perdões!!!

Eu comentei que o sent desabilita o timer2, então, depois de enviar é necessário habilitar novamente (eu acho rs):

if (cRecpIR.decode(&resCtrl)){
    switch (resCtrl.value){
    case power:
      irsend.sendNEC(0x8076807F, 32);
      cRecpIR.enableIRIn(); // Re-enable receiver
      break;
    case next:
      irsend.sendNEC(0x807620DF, 32);
      cRecpIR.enableIRIn(); // Re-enable receiver
      break;
      default:
      Serial.println("Nada");
      break;
    }
        cRecpIR.resume();
  }

um código que escrevi para fazer meus testes:

#include <IRremote.h>

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);

decode_results results;

IRsend irsend; //IR_USE_TIMER2 = pin 9 on Mega

unsigned int rawbuf[8] = {12500, 600, 2150, 600, 700, 1950, 600, 8500};

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

void loop() {
  if (Serial.read() != -1) {
    irsend.sendRaw(rawbuf, 8, 38 /* kHz */);
    Serial.println("Fired");
    irrecv.enableIRIn(); // Re-enable receiver
  }

  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    command(&results);
    irrecv.resume(); // Receive the next value
  }
}

Mortis Muito obrigado!!
consegui resolver o problema!!!

Fico feliz em ter ajudado :smiley: