• Welcome to LusoRobótica - Robótica em Português.
 

Dois receptores ir remote em um arduino???

Started by Donvan, 11 de July de 2012, 17:50

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

senso

O código da interrupção não é super complexo, simplesmente tens de fazer repetir o código todo na interrupção, quer dizer á outras maneiras de o fazer, mas a mais simples é essa.
Avr fanboy

iyahdub

#16
Ja agora podes colocar aqui o codigo ?!?
A biblioteca usa o timer 2 para interrupcao( 8 bits)... Por isso vou assumir que ainda temos o timer 1 livre ( que e 16 bits...) .
Outra pergunta...Em que pin estas a usar o segundo receptor ?!? O timer dois trabuca com o pin 11 e o pin 3...
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

iyahdub

Ok aqui esta... Depois de alghuma pesquisa, descobri afinal quie a versao final da biblioteca tem a opcao para usar o timer 1 em ves do dois...Portanto acho que a mina opiniao seria, se preciso, apenas definir o timer 1 numa delas.( ja experiementaste o 2nd receptor no pino 3 e o 1ro no 11 ou vice versa lol?!?).

Deixo aqui a parte relevante para que possas ter algum avanco...
Como ves tem a opcao de usar os varios timers...
Por isso quer dizer que o trabalho ja esta feito...
Agora talvez o Senso possa responder se alguma coisa mais e preciso( basta descomentar ?!? Alterar o nome do #define de forma a podermos utiliza-lo no UNO ?!?

// define which timer to use
//
// Uncomment the timer you wish to use on your board.  If you
// are using another library which uses timer2, you have options
// to switch IRremote to use a different timer.

// Arduino Mega
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  //#define IR_USE_TIMER1   // tx = pin 11
  #define IR_USE_TIMER2     // tx = pin 9
  //#define IR_USE_TIMER3   // tx = pin 5
  //#define IR_USE_TIMER4   // tx = pin 6
  //#define IR_USE_TIMER5   // tx = pin 46

// Teensy 1.0
#elif defined(__AVR_AT90USB162__)
  #define IR_USE_TIMER1     // tx = pin 17

// Teensy 2.0
#elif defined(__AVR_ATmega32U4__)
  //#define IR_USE_TIMER1   // tx = pin 14
  //#define IR_USE_TIMER3   // tx = pin 9
  #define IR_USE_TIMER4_HS  // tx = pin 10

// Teensy++ 1.0 & 2.0
#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
  //#define IR_USE_TIMER1   // tx = pin 25
  #define IR_USE_TIMER2     // tx = pin 1
  //#define IR_USE_TIMER3   // tx = pin 16

// Sanguino
#elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__)
  //#define IR_USE_TIMER1   // tx = pin 13
  #define IR_USE_TIMER2     // tx = pin 14

// Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, etc
#else
  //#define IR_USE_TIMER1   // tx = pin 9
  #define IR_USE_TIMER2     // tx = pin 3
#endif
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

Donvan

Quote from: senso on 14 de July de 2012, 14:13
O código da interrupção não é super complexo, simplesmente tens de fazer repetir o código todo na interrupção, quer dizer á outras maneiras de o fazer, mas a mais simples é essa.

"simplesmente tens de fazer repetir o código todo na interrupção", na biblioteca ou no codigo arduino?

Donvan

Quote from: iyahdub on 14 de July de 2012, 18:38
Ok aqui esta... Depois de alghuma pesquisa, descobri afinal quie a versao final da biblioteca tem a opcao para usar o timer 1 em ves do dois...Portanto acho que a mina opiniao seria, se preciso, apenas definir o timer 1 numa delas.( ja experiementaste o 2nd receptor no pino 3 e o 1ro no 11 ou vice versa lol?!?).

Deixo aqui a parte relevante para que possas ter algum avanco...
Como ves tem a opcao de usar os varios timers...
Por isso quer dizer que o trabalho ja esta feito...
Agora talvez o Senso possa responder se alguma coisa mais e preciso( basta descomentar ?!? Alterar o nome do #define de forma a podermos utiliza-lo no UNO ?!?

// define which timer to use
//
// Uncomment the timer you wish to use on your board.  If you
// are using another library which uses timer2, you have options
// to switch IRremote to use a different timer.

// Arduino Mega
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  //#define IR_USE_TIMER1   // tx = pin 11
  #define IR_USE_TIMER2     // tx = pin 9
  //#define IR_USE_TIMER3   // tx = pin 5
  //#define IR_USE_TIMER4   // tx = pin 6
  //#define IR_USE_TIMER5   // tx = pin 46

// Teensy 1.0
#elif defined(__AVR_AT90USB162__)
  #define IR_USE_TIMER1     // tx = pin 17

// Teensy 2.0
#elif defined(__AVR_ATmega32U4__)
  //#define IR_USE_TIMER1   // tx = pin 14
  //#define IR_USE_TIMER3   // tx = pin 9
  #define IR_USE_TIMER4_HS  // tx = pin 10

// Teensy++ 1.0 & 2.0
#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
  //#define IR_USE_TIMER1   // tx = pin 25
  #define IR_USE_TIMER2     // tx = pin 1
  //#define IR_USE_TIMER3   // tx = pin 16

// Sanguino
#elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__)
  //#define IR_USE_TIMER1   // tx = pin 13
  #define IR_USE_TIMER2     // tx = pin 14

// Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, etc
#else
  //#define IR_USE_TIMER1   // tx = pin 9
  #define IR_USE_TIMER2     // tx = pin 3
#endif


este é o codigo usado no arduino com uma das bibliotecas editada. não está o meu codigo aí, porque esse era para testar, se funciona esse, tambem funcionará com o meu codigo. só não coloquei o meu codigo, porque é demasiado grande e ainda esta em testes, todo desorganizado e sem comentar. mas se for mesmo preciso colocar, coloco sem problema.

se for preciso fazer upload da biblioteca diz!

obrigado!

ps- esse codigo da escolha do timer, vai aonde?

ah, os ir's não os tenho nem na porta 3 nem na 11. tenho um na digital 2 e o outro na entrada analogica A5. funcionam bem se programado só com uma IRremote e claro um de cada vez, ou seja, ou fica a dar um ou outro. por isso o ter de crear outra biblioteca edentica e editar os nomes, mas falta o interruptor.

tambem funcionam os dois ao mesmo tempo se for programado com o codigo que tem o delay. mas esse codigo não me convem pelo demux 4051.

mais alguma coisa, diz

obrigado!!

/*
* IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
* An IR detector/demodulator must be connected to the input RECV_PIN.
* Version 0.1 July, 2009
* Copyright 2009 Ken Shirriff
* http://arcfn.com
*/

#include <IRremote.h>
#include <IRremote2.h>
int RECV_PIN = 2;
int RECV_PIN2 = A5;
IRrecv irrecv(RECV_PIN);
IRrecv2 irrecv2(RECV_PIN2);
decode_results results;
decode_results2 results2;
void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  irrecv.enableIRIn2(); // Start the receiver2
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
 
    if (irrecv2.decode(&results2)) {
    Serial.println(results2.value, HEX);
    irrecv2.resume2(); // Receive the next value
  }
}

iyahdub

#20
Criar o mesmo codiigo com interrupcao diferente... Na biblioteca claro. Ao atribuires o pin respectivo aquele Timer, ele vai usar o prescaler predefinido pela biblioteca( no 3 e 11 o timer 2, etc...).
Tensz aqui outro ja acabado tb afinal, para timer 1 e 3
http://arduino.cc/playground/Code/Timer1...

PS Desculp[a, esquecime do link no outro post...lol
https://github.com/shirriff/Arduino-IRremote
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

Donvan

Quote from: iyahdub on 14 de July de 2012, 19:55
Criar o mesmo codiigo com interrupcao diferente... Na biblioteca claro. Ao atribuires o pin respectivo aquele Timer, ele vai usar o prescaler predefinido pela biblioteca( no 3 e 11 o timer 2, etc...).
Tensz aqui outro ja acabado tb afinal, para timer 1 e 3
http://arduino.cc/playground/Code/Timer1...

PS Desculp[a, esquecime do link no outro post...lol
https://github.com/shirriff/Arduino-IRremote

no primeiro link, não vi o codigo.

no segundo link, qual é...estou um pouco desorientado lol

não sei o que me passa hoje!!!

iyahdub

#22
Fui eu desculpa...
O segundo link e o do post anterior... ( https://github.com/shirriff/Arduino-IRremote )que ja e a ultima versao actualizada.
O que manipula os interrupts e neste ficheiro da biblioteca  IRremoteInt.h
o outro e apenas um adicional que entretanto achei !

Eu e que me esqueci de incluir o link da primeira vez, desculpa !
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

Donvan

Quote from: iyahdub on 14 de July de 2012, 18:38
Ok aqui esta... Depois de alghuma pesquisa, descobri afinal quie a versao final da biblioteca tem a opcao para usar o timer 1 em ves do dois...Portanto acho que a mina opiniao seria, se preciso, apenas definir o timer 1 numa delas.( ja experiementaste o 2nd receptor no pino 3 e o 1ro no 11 ou vice versa lol?!?).

Deixo aqui a parte relevante para que possas ter algum avanco...
Como ves tem a opcao de usar os varios timers...
Por isso quer dizer que o trabalho ja esta feito...
Agora talvez o Senso possa responder se alguma coisa mais e preciso( basta descomentar ?!? Alterar o nome do #define de forma a podermos utiliza-lo no UNO ?!?

// define which timer to use
//
// Uncomment the timer you wish to use on your board.  If you
// are using another library which uses timer2, you have options
// to switch IRremote to use a different timer.

// Arduino Mega
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  //#define IR_USE_TIMER1   // tx = pin 11
  #define IR_USE_TIMER2     // tx = pin 9
  //#define IR_USE_TIMER3   // tx = pin 5
  //#define IR_USE_TIMER4   // tx = pin 6
  //#define IR_USE_TIMER5   // tx = pin 46

// Teensy 1.0
#elif defined(__AVR_AT90USB162__)
  #define IR_USE_TIMER1     // tx = pin 17

// Teensy 2.0
#elif defined(__AVR_ATmega32U4__)
  //#define IR_USE_TIMER1   // tx = pin 14
  //#define IR_USE_TIMER3   // tx = pin 9
  #define IR_USE_TIMER4_HS  // tx = pin 10

// Teensy++ 1.0 & 2.0
#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
  //#define IR_USE_TIMER1   // tx = pin 25
  #define IR_USE_TIMER2     // tx = pin 1
  //#define IR_USE_TIMER3   // tx = pin 16

// Sanguino
#elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__)
  //#define IR_USE_TIMER1   // tx = pin 13
  #define IR_USE_TIMER2     // tx = pin 14

// Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, etc
#else
  //#define IR_USE_TIMER1   // tx = pin 9
  #define IR_USE_TIMER2     // tx = pin 3
#endif


desculpa, mas acho que ainda não acordei lol, esse codigo, onde o coloco para fazer com que uma das bibliotecas funcione com o timer 1 em vez do 2?
se depois tiver de trocar os pinos dos ir's, tambem posso mudar( é que o arduino esta cheio), mas antes de mudar, testo assim aver se funciona.

Donvan

#24
onde encontraste esse codigo de definir os timers, não o encontro nos ficheiros da biblioteca irremote no link que postaste


ah já vi onde foi, não li bem o teu post... ???

iyahdub

Se calhar fui eu que te confundi.
eu postei apenas um excerto do codigo do ficheiro IRremoteInt.h ( que e o que controla as interrupcoes do timer).
E esse que tens que manipular agora...
Criar uma segunda biblioteca para o 2ndo receptor, usando o pin correspondente( mais ou menos na mesma linha do que ja tinhas feito, mas desta vez teras a biblioteca de maneira correcta e usando o pin correcto).
Faz sentido ?!
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

Donvan

Quote from: iyahdub on 14 de July de 2012, 20:36
Se calhar fui eu que te confundi.
eu postei apenas um excerto do codigo do ficheiro IRremoteInt.h ( que e o que controla as interrupcoes do timer).
E esse que tens que manipular agora...
Criar uma segunda biblioteca para o 2ndo receptor, usando o pin correspondente( mais ou menos na mesma linha do que ja tinhas feito, mas desta vez teras a biblioteca de maneira correcta e usando o pin correcto).
Faz sentido ?!

sim, já estava a ver onde estava, testar e depois digo algo.

Só mais uma coisa, dizias que tinha de mudar o nome para arduino, porque nao tem arduino, so tem megas, duemilanove, etc... se poderes dizer qual deles altero e que nome colocar........mas pelo que estou a ver, lá diz "else" no final deles e no caso do duemilanove, etc, não tem nome, só diz defenir um timer ou outro, por isso penso que não tenho de alterar nenhum nome, só mesmo defenir o timer

iyahdub

Ai ja tenho que pesquisar como e que o arduino usa esse define, ou se e so por timer... Por isso perguntei a opiniao do Senso... mas espera um bocado !! ( Papinha toda feita lol Na boa...No futiuro ajudas alguem tb)
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

Donvan

No que souber ajudo sem problema ningun.

Muito obrigado pela tua ajuda e no que precisares, aqui estarei.

vou fazer alguns testes e depois digo algo!!!

iyahdub

#29
Substitui mega por isto __AVR_ATmega168__) || defined(__AVR_ATmega328__ dentro dos parentesis...Sabes onde nao sabes ?!?
#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328__)



E ja deve dar !!

PS- Espero que assim nao vamos criar um conflito entre as duas... ... lembra-te de renomear a biblioteca para um dois por exemplo e depois inclui-la no codigo principal...
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!