Go Down

Topic: [Dúvida] Recebimento e envio de infra-vermelho. (Read 1 time) previous topic - next topic

aurino123

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!
Code: [Select]
#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();
  }
}

Mortis

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):

Code: [Select]
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;
    }
  }
}

aurino123

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!

Mortis

#3
Jan 11, 2013, 12:27 am Last Edit: Jan 11, 2013, 12:32 am by Mortis Reason: 1
Cara, mil perdões!!!

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

Code: [Select]
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();
 }

Mortis

um código que escrevi para fazer meus testes:

Code: [Select]
#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
 }
}

aurino123

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


Go Up