[RESOLVIDO] Alguem ajuda ,comando infravermelho LENTO

Ola galera Alguem ajuda , Envio uma letra para o arduino demora para responde nesse codigo ou as vezes tenho que apertar 2 vezes para ir o comando ? alguem sabe me dizer ? 

valeoo CODIGO : 

Sou novo no assunto se caso alguem puder arrumar o codigo agradeço

#include <IRremote.h>

IRsend irsend;

int led = 3;
int led1 = 8;
int ch1 = 4;
int ch2 = 5;
int ch3 = 6;
int ch4 = 7;
unsigned int S_pwr[67]={4500,4350,650,1600,600,1600,650,450,600,500,650,500,600,500,600,1600,600,500,650,1600,600,1600,600,500,600,500,650,1600,600,500,600,1600,650,450,600,1650,600,500,600,500,600,500,600,500,650,450,650,500,600,500,600,500,600,1600,600,1650,600,1600,600,1600,600,1650,600,1600,600,1600,650,};
unsigned int S_fca[67]={4550,4350,650,1600,600,1600,650,450,650,450,600,550,600,500,600,1600,650,450,600,1650,600,1600,600,500,600,500,650,1600,600,500,600,1600,650,450,600,1650,600,500,600,500,600,500,600,1600,600,550,600,500,600,500,600,500,650 ,1550,650,1600,600,1600,600,500,650,1600,600,1600,600,1600,600,};
unsigned int S_vol[67]={4500,4400,600,1650,550,1650,600,500,600,500,600,500,600,550,600,1600,600,500,600,1600,600,1650,600,500,600,500,600,1600,600,550,600,1600,600,500,600,1600,600,1650,600,500,600,1600,600,1650,600,1600,600,500,600,500,600,500,600,550,600,1600,600,500,600,500,600,550,550,1650,600,1600,600,};
unsigned int S_volm[67]={4500,4400,600,1600,600,1650,600,500,600,500,600,500,600,500,600,1650,600,500,600,1600,600,1650,600,500,600,500,600,1600,600,500,600,1650,600,500,600,1600,600,1650,600,500,600,500,600,1600,600,1650,600,500,600,500,600,500,600,500,600,1650,600,1600,600,500,600,500,600,1650,600,1600,600,};
unsigned int S_ant[67]={4500,4400,600,1650,550,1650,600,500,600,500,600,500,600,550,600,1600,600,500,600,1600,600,1650,600,500,600,500,600,1600,600,550,600,1600,600,500,600,1600,600,1650,550,550,600,1600,600,1650,600,500,600,500,550,550,600,500,600,550,550,1650,600,500,600,500,600,1650,550,1650,600,1600,600,};
unsigned int S_ava[67]={4500,4400,550,1650,600,1600,600,500,600,500,600,550,600,500,600,1600,600,500,600,1650,600,1600,600,500,600,500,600,1650,600,500,600,1600,600,500,600,1650,600,1600,600,500,600,500,600,1650,600,500,550,550,600,500,600,500,600,500,600,1650,600,1600,600,500,600,1650,600,1600,550,1650,600,};
unsigned int S_pla[67]={4500,4400,550,1650,600,1600,600,500,600,500,600,550,600,500,600,1600,600,500,600,1650,600,1600,600,500,600,500,600,1650,600,500,600,1600,600,500,600,1650,600,1600,600,500,600,500,600,1650,600,500,550,550,600,500,600,500,600,500,600,1650,600,1600,600,500,600,1650,600,1600,550,1650,600,};
void setup()
{
Serial.begin(9600);
pinMode(led,OUTPUT); //infravermelho;
pinMode(led1,OUTPUT);//infravermelho2;
pinMode(ch1, OUTPUT);//Pino digital saída do Arduino(4-ch1);
pinMode(ch2, OUTPUT);//Pino digital saída do Arduino(5-ch2);
pinMode(ch3, OUTPUT);//Pino digital saída do Arduino(6-ch3);
pinMode(ch4, OUTPUT);//Pino digital saída do Arduino(7-ch4);
}
void loop() {
char valorlido = Serial.read();

//Controle da tv //

if(valorlido == 'a')
irsend.sendNEC (0x2FD48B7, 32); // Power
if(valorlido == 'b')
irsend.sendNEC (0x2FDF00F, 32); // Input
if(valorlido == 'c')
irsend.sendNEC (0x2FD01FE, 32); // Menu
if(valorlido == 'd')
irsend.sendNEC (0x2FD41BE, 32); // Tecla Cima
if(valorlido == 'e')
irsend.sendNEC (0x2FDC13E, 32); // Tecla Baixo
if(valorlido == 'f')
irsend.sendNEC (0x2FDB847, 32); // Tecla Esquerda
if(valorlido == 'g')
irsend.sendNEC (0x2FD9867, 32); // Tecla Direita
if(valorlido == 'h')
irsend.sendNEC (0x2FD58A7, 32); // Volume +
if(valorlido == 'i')
irsend.sendNEC (0x2FD7887, 32); // Volume -
if(valorlido == 'j')
irsend.sendNEC (0x2FDD827, 32); // Canal +
if(valorlido == 'k')
irsend.sendNEC (0x2FDF807, 32); // Canal -
if(valorlido == 'l')
irsend.sendNEC (0x2FD08F7, 32); // Mute
if(valorlido == 'z')
irsend.sendNEC (0x2FD916E, 32); // Enter
if(valorlido == 'A')
irsend.sendNEC (0x2FD20DF, 32); // Sbt
if(valorlido == 'B')
irsend.sendNEC (0x2FDA05F, 32); // Globo
if(valorlido == 'C')
irsend.sendNEC (0x2FDE01F, 32); // Record
if(valorlido == 'D')
irsend.sendNEC (0x2FD906F, 32); // Rede tv
if(valorlido == 'E')
irsend.sendNEC (0x2FD807F, 32); // 1
if(valorlido == 'F')
irsend.sendNEC (0x2FDC03F, 32); // 3

//Controle FITA RGB//

if(valorlido == 'm')
irsend.sendNEC (0xFF02FD, 32); // Power
if(valorlido == 'n')
irsend.sendNEC (0xFF3AC5, 32); // Aumentar Brilho
if(valorlido == 'o')
irsend.sendNEC (0xFFBA45, 32); // Diminuir Brilho
if(valorlido == 'p')
irsend.sendNEC (0xFF9A65, 32); // Vermelho
if(valorlido == 'q')
irsend.sendNEC (0xFF1AE5, 32); // Verde
if(valorlido == 'r')
irsend.sendNEC (0xFFA25D, 32); // Azul
if(valorlido == 's')
irsend.sendNEC (0xFF22DD, 32); // Branco
if(valorlido == 't')
irsend.sendNEC (0xFFE817, 32); // + Velocidade
if(valorlido == 'u')
irsend.sendNEC (0xFFC837, 32); // - Velocidade
if(valorlido == 'v')
irsend.sendNEC (0xFFF00F, 32); // Auto
if(valorlido == 'y')
irsend.sendNEC (0xFFD02F, 32); // Flash
if(valorlido == 'x')
irsend.sendNEC (0xFFE01F, 32); // Efeito 1
if(valorlido == 'w')
irsend.sendNEC (0xFF609F, 32); // Efeito 2

//HOME THEATER //

if (Serial.read() == 'G')
irsend.sendRaw(S_pwr,67, 38);
delay(10);
if (Serial.read() == 'H')
irsend.sendRaw(S_fca,67, 38);
delay(10);
if (Serial.read() == 'I')
irsend.sendRaw(S_vol,67, 38);
delay(10);
if (Serial.read() == 'J')
irsend.sendRaw(S_volm,67, 38);
delay(10);
if (Serial.read() == 'K')
irsend.sendRaw(S_ant,67, 38);
delay(10);
if (Serial.read() == 'L')
irsend.sendRaw(S_ava,67, 38);
delay(10);
if (Serial.read() == 'M')
irsend.sendRaw(S_pla,67, 38);
delay(10);

//LAMPADAS//

//CANAL 1//
if(valorlido == '1')
{
digitalWrite(ch1, !digitalRead(ch1));
}

//CANAL 2//
if(valorlido == '2')
{
digitalWrite(ch2, !digitalRead(ch2));
}

//CANAL3//
if(valorlido == '3')
{
digitalWrite(ch3, !digitalRead(ch3));
}

//CANAL 4//
if(valorlido == '4')
{
digitalWrite(ch4, !digitalRead(ch4));
}

delay(10);
}

Exibições: 520

Responder esta

Respostas a este tópico

Bom dia

Talvez o que esteja acontecendo é que quando seu programa chega na parte do HOME THEATER ele está lendo a porta serial a cada laço IF. Faça aqui igual você fez para cima em vez de mandar ler a porta serial leia a variavel "valorlido"

Para ficar mais rápido, pode se trocar este monte de IF pela estrutura CASE.

Testa e veja se melhorou.

Abraço

Ola otvavio

Bom dia , Beleza eu vou tentar aqui ,

muito Obrigado , teria como voce so me da um exemplo por favor ? 

valeo brigado mesmo por ter me ajudado 

Lucas, bom dia.

não testei o seu code, mas pelo que vi, acho que tem muito "if".

experimente refazer o code para "switch" ao inves de "if", talvez melhore.

 switch(valorlido)

  {

   Case: ....

Outra coisa: Pra que estas linhas?

if (Serial.read() == ......  se ja tem esta  "char valorlido = Serial.read();"

Mais uma: Eu colocaria a definição da variavél no inicio, e não dentro do loop; (Global)

Assim: 

char valorlido ;

depois   void loop()

     valorlido = Serial.read();

    ..............

   .................

  só por enquanto.

Rui

Ola Rui Bom Dia beleza , Entao no caso eu trocaria todos os if por "switch" 

Valeo Pela Ajuda , mais uma vez , no meu codigo ele ate roda os codigos bem so que chega na parte do HOME THEATER QUE ELE FICA LENTO OU TEM Q APERTA 2 VEZES ou as vezes nem vai 

poderia da um exemplo em uma linha , sou iniciante rs 

valeo mais muito obrigado pelo interesse 

Lucas, não.

no lugar dos if, entram case:

Rui

OLA AMIGOS REFIZ TOODO O CODIGO COM A AJUDA DO NOSSO AMIGO RUI AGORA TA 100%

TROCAMOS O IF PELO CASE 

VEJA COMO FICO TODO O CODIGO 

#include <IRremote.h>

IRsend irsend;

int led = 3;
int led1 = 8;
int ch1 = 4;
int ch2 = 5;
int ch3 = 6;
int ch4 = 7;
unsigned int S_pwr[67]={4500,4350,650,1600,600,1600,650,450,600,500,650,500,600,500,600,1600,600,500,650,1600,600,1600,600,500,600,500,650,1600,600,500,600,1600,650,450,600,1650,600,500,600,500,600,500,600,500,650,450,650,500,600,500,600,500,600,1600,600,1650,600,1600,600,1600,600,1650,600,1600,600,1600,650,};
unsigned int S_fca[67]={4550,4350,650,1600,600,1600,650,450,650,450,600,550,600,500,600,1600,650,450,600,1650,600,1600,600,500,600,500,650,1600,600,500,600,1600,650,450,600,1650,600,500,600,500,600,500,600,1600,600,550,600,500,600,500,600,500,650 ,1550,650,1600,600,1600,600,500,650,1600,600,1600,600,1600,600,};
unsigned int S_vol[67]={4500,4400,600,1650,550,1650,600,500,600,500,600,500,600,550,600,1600,600,500,600,1600,600,1650,600,500,600,500,600,1600,600,550,600,1600,600,500,600,1600,600,1650,600,500,600,1600,600,1650,600,1600,600,500,600,500,600,500,600,550,600,1600,600,500,600,500,600,550,550,1650,600,1600,600,};
unsigned int S_volm[67]={4500,4400,600,1600,600,1650,600,500,600,500,600,500,600,500,600,1650,600,500,600,1600,600,1650,600,500,600,500,600,1600,600,500,600,1650,600,500,600,1600,600,1650,600,500,600,500,600,1600,600,1650,600,500,600,500,600,500,600,500,600,1650,600,1600,600,500,600,500,600,1650,600,1600,600,};
unsigned int S_ant[67]={4500,4400,600,1650,550,1650,600,500,600,500,600,500,600,550,600,1600,600,500,600,1600,600,1650,600,500,600,500,600,1600,600,550,600,1600,600,500,600,1600,600,1650,550,550,600,1600,600,1650,600,500,600,500,550,550,600,500,600,550,550,1650,600,500,600,500,600,1650,550,1650,600,1600,600,};
unsigned int S_ava[67]={4500,4400,550,1650,600,1600,600,500,600,500,600,550,600,500,600,1600,600,500,600,1650,600,1600,600,500,600,500,600,1650,600,500,600,1600,600,500,600,1650,600,1600,600,500,600,500,600,1650,600,500,550,550,600,500,600,500,600,500,600,1650,600,1600,600,500,600,1650,600,1600,550,1650,600,};
unsigned int S_pla[67]={4500,4400,550,1650,600,1600,600,500,600,500,600,550,600,500,600,1600,600,500,600,1650,600,1600,600,500,600,500,600,1650,600,500,600,1600,600,500,600,1650,600,1600,600,500,600,500,600,1650,600,500,550,550,600,500,600,500,600,500,600,1650,600,1600,600,500,600,1650,600,1600,550,1650,600,};


void setup()
{
Serial.begin(9600);
pinMode(led,OUTPUT); //infravermelho;
pinMode(led1,OUTPUT);//infravermelho2;
pinMode(ch1, OUTPUT);//Pino digital saída do Arduino(4-ch1);
pinMode(ch2, OUTPUT);//Pino digital saída do Arduino(5-ch2);
pinMode(ch3, OUTPUT);//Pino digital saída do Arduino(6-ch3);
pinMode(ch4, OUTPUT);//Pino digital saída do Arduino(7-ch4);
}
void loop() {
char valorlido = Serial.read();

//Controle da tv //

switch(valorlido) {case 'a': irsend.sendNEC (0x2FD48B7, 32); // Power break;
}
switch(valorlido) {case 'b': irsend.sendNEC (0x2FDF00F, 32); // Input;
}
switch(valorlido) {case 'c': irsend.sendNEC (0x2FD01FE, 32); // Menu;
}
switch(valorlido) {case 'd': irsend.sendNEC (0x2FD41BE, 32); // Tecla Cima;
}
switch(valorlido) {case 'e': irsend.sendNEC (0x2FDC13E, 32); // Tecla Baixo;
}
switch(valorlido) {case 'f': irsend.sendNEC (0x2FDB847, 32); // Tecla Esquerda;
}
switch(valorlido) {case 'g': irsend.sendNEC (0x2FD9867, 32); // Tecla Direita;
}
switch(valorlido) {case 'h': irsend.sendNEC (0x2FD58A7, 32); // Volume +;
}
switch(valorlido) {case 'i': irsend.sendNEC (0x2FD7887, 32); // Volume -;
}
switch(valorlido) {case 'j': irsend.sendNEC (0x2FDD827, 32); // Canal +;
}
switch(valorlido) {case 'k': irsend.sendNEC (0x2FDF807, 32); // Canal -;
}
switch(valorlido) {case 'l': irsend.sendNEC (0x2FD08F7, 32); // Mute;
}
switch(valorlido) {case 'z': irsend.sendNEC (0x2FD916E, 32); // Enter;
}
switch(valorlido) {case 'A': irsend.sendNEC (0x2FD20DF, 32); // Sbt:
}
switch(valorlido) {case 'B': irsend.sendNEC (0x2FDA05F, 32); // Globo:
}
switch(valorlido) {case 'C': irsend.sendNEC (0x2FDE01F, 32); // Record:
}
switch(valorlido) {case 'D': irsend.sendNEC (0x2FD906F, 32); // Rede tv:
}

//Controle Home;
switch(valorlido) {case 'G': irsend.sendRaw (S_pwr,67, 38); // Power break;
}
switch(valorlido) {case 'H': irsend.sendRaw (S_fca,67, 38); // funcao;
}
switch(valorlido) {case 'I': irsend.sendRaw (S_vol,67, 38); // Volume - ;
}
switch(valorlido) {case 'J': irsend.sendRaw (S_volm,67, 38); // Volume +;
}
switch(valorlido) {case 'K': irsend.sendRaw (S_volm,67, 38); // anterior;
}
switch(valorlido) {case 'L': irsend.sendRaw (S_ava,67, 38); // avancar;
}
switch(valorlido) {case 'M': irsend.sendRaw (S_pla,67, 38); //play;
}


//FITA DE LED;
switch(valorlido) {case 'm': irsend.sendNEC (0xFF02FD, 32); // Power;
}
switch(valorlido) {case 'n': irsend.sendNEC (0xFF3AC5, 32); // Aumentar Brilho;
}
switch(valorlido) {case 'o': irsend.sendNEC (0xFFBA45, 32); // Diminuir Brilho;
}
switch(valorlido) {case 'p': irsend.sendNEC (0xFF9A65, 32); // Vermelho;
}
switch(valorlido) {case 'q': irsend.sendNEC (0xFF1AE5, 32); // Verde;
}
switch(valorlido) {case 'r': irsend.sendNEC (0xFFA25D, 32); // Azul;
}
switch(valorlido) {case 's': irsend.sendNEC (0xFF22DD, 32); // Branco;
}
switch(valorlido) {case 't': irsend.sendNEC (0xFFE817, 32); // + Velocidade;
}
switch(valorlido) {case 'u': irsend.sendNEC (0xFFC837, 32); // - Velocidade;
}
switch(valorlido) {case 'v': irsend.sendNEC (0xFFF00F, 32); // Auto;
}
switch(valorlido) {case 'y': irsend.sendNEC (0xFFD02F, 32); // Flash;
}
switch(valorlido) {case 'x': irsend.sendNEC (0xFFE01F, 32); // Efeito 1;
}
switch(valorlido) {case 'w': irsend.sendNEC (0xFF609F, 32); // Efeito 2;
}
//LAMPADAS;

//CANAL 1//

switch(valorlido) {case '1':digitalWrite(ch1, !digitalRead(ch1));//Quarto;
}
switch(valorlido) {case '5':digitalWrite(ch2, !digitalRead(ch2));//Banheiro;
}
switch(valorlido) {case '3':digitalWrite(ch3, !digitalRead(ch3));//escada;
}
switch(valorlido) {case '4':digitalWrite(ch4, !digitalRead(ch4)); // outro
}

delay(10);
}

Olá Lucas,

sou o sócio do Rui, como pretende pagar pelo serviço, cartão, boleto, avise a nome de quem vai a NF, CPF na nota?

-:) -:)

Brincadeirinha!

Abs.

kra... faltou soh um pouquinho de entendimento:

switch(valorlido) {

  case '1':

    faz alguma coisa;

    break;

  case '2':

    faz outra coisa;

    break;

  case '3':

    faz outra;

    break;

}

dah uma sacada em http://www.arduino.cc/en/Reference/SwitchCase

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço