Estou com dificuldades para fazer o acionamento do controle RC6 .Usei o controle nec e funcionou perfeitamente alguém já passou por este problema? Estou tentando controlar um receptor da Embratel atual claro tv.

Estou usando esta exemplo para receber dados do controle:

/*
* IRremote: IRrecvDump - dump details of 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>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

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

// based on Print::printNumber
void printHex64(unsigned long long n)
{
unsigned char buf[sizeof(unsigned long long) * 2];
unsigned long i = 0;

if (n == 0) {
Serial.print('0');
return;
}

while (n > 0) {
buf[i++] = n & 0xf;
n >>= 4;
}

for (; i > 0; i--) {
Serial.print((char) (buf[i - 1] < 10 ?
'0' + buf[i - 1] :
'A' + buf[i - 1] - 10));
}
}


// Dumps out the decode_results structure.
// Call this after IRrecv::decode()
// void * to work around compiler issue
//void dump(void *v) {
// decode_results *results = (decode_results *)v
void dump(decode_results *results) {
int count = results->rawlen;
if (results->decode_type == UNKNOWN) {
Serial.print("Unknown encoding: ");
}
else if (results->decode_type == NEC) {
Serial.print("Decoded NEC: ");
}
else if (results->decode_type == SONY) {
Serial.print("Decoded SONY: ");
}
else if (results->decode_type == RC5) {
Serial.print("Decoded RC5: ");
}
else if (results->decode_type == RC6) {
Serial.print("Decoded RC6: ");
}
printHex64(results->value);
Serial.print(" (");
Serial.print(results->bits, DEC);
Serial.println(" bits)");
Serial.print("Raw (");
Serial.print(count, DEC);
Serial.print("): ");

for (int i = 0; i < count; i++) {
if ((i % 2) == 1) {
Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
}
else {
Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
}
Serial.print(" ");
}
Serial.println("");
}


void loop() {
if (irrecv.decode(&results)) {
dump(&results);
irrecv.resume(); // Receive the next value
}
}

E este e o que envia para tv

/*
* IRremote: IRsendDemo - demonstra o envio de codigos IR com IRsend
* Um LED IR deve ser conectado a porta PWM 3 do Arduino.
* Versao 0.1 Julho, 2009
* Copyright 2009 Ken Shirriff
* http://arcfn.com
*/

#include <IRremote.h>

IRsend irsend;

void setup()
{
Serial.begin(9600);
}

void loop() {
char c = Serial.read();
if (c == 'a') {
for (int i = 0; i < 1; i++) {
irsend.sendRC6(0x80542720, 36);
delay(40);
}
}
if (c == 'b') {
for (int i = 0; i < 1; i++) {
irsend.sendRC6(0x8054A721, 36);
delay(40);
}
}
}

Exibições: 2772

Responder esta

Respostas a este tópico

Olá Paulo,

Clonei o RAW de algumas teclas via IRdump.

Por exemplo:

tecla5: unsigned int ch5[60] = {2700,800,450,450,500,400,450,850,450,800,1400,850,450,400,500,400,450,450,450,400,450,450,450,400,450,400,950,850,900,850,900,850,450,450,450,400,450,450,900,850,450,400,900,450,450,400,500,800,500,400,450,450,450,400,450,400,950,850,900};

O que eu quero é enviar comando para colocar no canal 545, por exemplo. Estou usando o seguinte código:

delay(400);
irsend.sendRaw(ch5,60,36);
delay(400);
irsend.sendRaw(ch4,60,36);
delay(400);
irsend.sendRaw(ch5,60,36);
delay(400);

Mas ele se perde.. só envia o 5, as vezes o 4 e o 5..

Tenho dúvidas se a frequencia dele é 36Khz mesmo...

Você pode colocar uma parte do seu código onde vc envia?

Obrigado!

Olá Flávio!

Então, o seu problema não está em enviar o comando de um botão por vez, mas está em enviar uma sequência de botões como no caso do 545 por exemplo? Assim, esse teste eu não fiz, pois minha primeira ideia era clonar apenas os botões fundamentais, como aumentar e diminuir canais, volume e os favoritos, bem como o botão power. Isso pois o projeto é para uma pessoa com deficiência que apenas quer controlar os equipamentos do quarto (Claro TV, TV, Parabólica e Ar Condicionado), e como estou utilizando o Shield sobre isso tudo, estou com problemas em se tratando de memória para o programa rodar...

A principio, a frequência não muda, mas claro que não se pode descartar essa hipótese, mas vamos tratar como sendo a frequência padrão, até porque você consegue enviar os códigos dos botões separadamente para o seu receptor.

Talvez alterar o seu delay já mude algo, já tentasse alterar isso? 

O seu código de envio aparentemente é idêntico ao meu, só mudando o código da variável.

unsigned int raw[58] ={2750,800,550,300,550,350,550,750,550,800,1400,750,550,350,550,350,550,350,550,300,550,350,550,350,500,350,1000,800,950,800,1000,750,550,350,1000,750,1000,750,550,350,1000,300,550,350,500,800,550,350,550,350,1000,750,550,350,550,300,1000,};
irsend.sendRaw(raw,58,38); //VOL-
Serial.println("Diminui Volume TV Cabo!");  

Se o único problema for enviar o código de vários botões para formar o comando para ir diretamente para um canal, o negócio é alterar e ir testando, a começar pelo seu delay, se for algo a mais, aí posso disponibilizar o código antigo que no qual fiz alguns testes mas que já estava funcionando.

Abraços.

Olá Paulo,

Você acredita que o problema era que o IR não estava alinhado com o receptor e que a bateria que eu estava usando no Arduino estava fraca?

Putz.. às vezes a gente bate cabeça no código e a solução é mais simples...

Com relação ao seu problema com a memória, se vc estiver usando um Arduino Uno, acredito que terá que migrar para o Mega que tem 256 KB contra 32 KB do Uno.

Se quiser podemos continuar a trocar experiencias sobre estes projetos. O meu controla a TV com celular via Bluetooth.

Abraço e obrigado!

opa, só confirmando: seu controle você disse que era 36kHz? vc tirou de algum lugar este específico? pois 90% dos controles para TV, som, etc usam 38kHz (até onde eu sei só a sony usa 40.

o meu radio da SONY ficava igual vc comentou, um comando era reconhcido outro não!...

ai descobri que era o delay entre envios e a frequência que estava errada.

 Millencolinhc,

Acabei retornando para os 38Khz mesmo... estava usando 36 pois o IRdump estava me indicando esta frequencia. Mexi dos delay e fiquei em 800 ms..

Abs!

flavio, onde é mostrado este valor da frequencia? não conheço um reconhecimento da frequência na leitura.

vc não está falando do tamanho do código não???

o valor que é retornado no irdump é o tamanho do codigo (quantidade de bits),

este valor não é utilizado quando se envia o codigo hexadecimal,

irsend.sendRC6("codigo HEX", "freq");

mas ao enviar o RAW você precisa informar a qtd de bits do codigo.

irsend.sendRaw("codigo RAW","bits","freq");

Olá Flávio!!!

Pois então, esse tipo de coisa acontece, eu também me bati um monte porque tinha algo simples errado e eu procurando algo complexo. Uma vez eu estava com um projeto para a graduação que não funcionava, e fiquei horas e nada. No meio da noite acordei e pensei, putz, ta faltando um ponto e vírgula... kkk!!!

Sim, a idéia de migrar para o Mega é uma alternativa, embora seja um pouco mais caro... A questão é, tenho arduino funcionando com o shield Ethernet e alguns com o XBee (de outro projeto), será que vou conseguir migrar do uno para o Mega sem problemas? Isso em relação aos Shields...

Então, está controlando via celular com Bluethooth? Massa!!! Chegasse a fazer uma interface gráfica para o seu sistema?

Abraço!!!

Ola Galera.

  Estou enfrentando o mesmo problema, mas o códgo raw que aparece quando aperto um botão do controle não está funcionando quando tento transmitir pelo Arduíno.

O Códgo que aparece é esse:

8054275B
Decoded RC6: 8054A70C (36 bits)
Raw (60): -32184,2700,-850,450,-400,500,-400,500,-800,500,-850,1350,-850,450,-400,500,-400,500,-400,500,-400,450,-400,500,-400,500,-400,900,-850,950,-800,950,-850,450,-450,900,-850,900,-850,500,-400,900,-400,500,-400,500,-800,500,-400,500,-400,450,-450,900,-400,500,-850,450,-400,500
8054270C

Alguém poderia me ajudar??

Muito obrigado!!

 Millencolinhc,

Quanto ao que eu falei sobre a frequencia, eu vi neste tópico. Acho que o cara se confundiu igual mim... 

http://forum.arduino.cc/index.php?topic=196315.0;wap2

Paulo,

É, o projeto está caminhando. Fiz a interface gráfica no App inventor, mas ainda não finalizei. Quanto à migração para o Mega, não entendo muito, mas acho que é só mudança de pinos.. Se alguem aqui no forum souber melhor, pode ajudar.

tem alteração de pino, se não me engano do 4 (UNO) para o 9 (MEGA) e vc deve especificar o pino na sua rotina.

se você estiver usando ethernet shield, ao invés de migrar para o MEGA, por causa do tamanho da memoria de armazenamento, você pode criar uma rotina para carregar o código de um microSD

aqui eu faço a captura do RAW e guardo no SD, depois só acesso na hr da transmissão.

PS: sobre a Freq, muda sim, SONY por ex é 40, o resto a maioria é 38kHz, porém se sua rotina e a ligação do LED estiverem bem montados, o sony tb funciona com 38kHz

Olá agora que consegui aprovação para postar aqui no post. Estou tentando fazer o mesmo projeto seu, mas sintonizando um canal especifico.

Mas não sei porque o dado chega repetido na caixa.

Ao invez de 205, na caixa chega: 205052 ou 20502 etc.

Já teve algum problema desse?

Poderia me ajudar com isso por favor?

http://labdegaragem.com/forum/topics/mudando-de-canal-usando-infrar...

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço