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!!!

Mortis


Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy