Por Favor gente preciso de Ajuda !!

Estou tendo Problemas com a Parte de Programação !.

Quero Usar um Controle ( IR ) para ativar uma Lampada,
e Um LCD ( Display 16x2 )
E quero q, quando eu aperto para Acender a Lampada Apareça uma Mensagem no LCD

( ex:Lampada Ligada);


Mas não Estou Conseguindo
Oque eu posso Fazer Para Resolver Isso ???

Aqui está a Programação :

#include <LiquidCrystal.h>
#include <IRremote.h>
int RECV_PIN = 10;
IRrecv irrecv(RECV_PIN);
int ledpin=13;
decode_results results;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup()

{

  lcd.begin(16, 2);
  Serial.begin(9600);
  pinMode(ledpin,OUTPUT); // Configuração da Porta
  irrecv.enableIRIn();

}

void loop()
{
   if (irrecv.decode(&results))
     { Serial.println(results.value, DEC);
        irrecv.resume();
     }
       if (results.value == 912274)
       {
         digitalWrite(ledpin,HIGH);
         lcd.clear(); //limpa o display do LCD.
         lcd.print("Lampada Ligada"); //imprime a string no display do LCD.
         delay(2000);

         lcd.clear();
      }
       else (results.value == 256914)
       {
        digitalWrite(ledpin,LOW);
        lcd.clear(); //limpa o display do LCD.
        lcd.print("Lampada Desligada"); //imprime a string no display do LCD.
        delay(2000);

        lcd.clear();
       }

}

Agradeço de coração á quem me Ajudar ..

Exibições: 2606

As respostas para este tópico estão encerradas.

Respostas a este tópico

Amigão, vc esqueceu de postar o que está acontecendo de errado. Se for só a mensagem que não aparece, verifique a conexão do LCD, principalmente a conexão de controle de brilho, se houver.

éh tava com pressa e acabei esquecendo!

Com a Ligação esta tudo OK !

Certo:

Eu quero q o LCD mostre a mensagem por 2 cegundos, mas a mensagem fica aparecendo eternamente, e Tambem quando eu aperto o Controle para Acender ou Apagar ele não responde na mesma hora ( demora uns 2 cegundos ).

Eu imagino q seja por causa dos Delay q eu coloquei , Como fasso para não dar esta Interferencia do Lcd com o Controle ?

Valeu Abraço

seria mais ou menos como o video o que voce pretende?

de uma olhada neste video aqui...

http://www.youtube.com/watch?v=b4gcncx4PuQ

se for isso te ajudo!!

abraço

Sim.

Só vai mudar q eu não tenho um sensor de temperatura!

mas seria + ou- assim mesmo.

Como vc fez para não dar Conflito com o IR?,então eu teria q fazer uma programaçao separada pois o Delay 

do LCD atrapalhão á resposta do controle.

teria como vc me passar a programação ou só uma parte dela ?

abraço..

amigo, seu codigo esta quase certo, para não dar conflito, vc sem que  limpar o lcd com o lcd.clear();

ate ai esta certo, mas vc tem que usar o set cursor para ele eescrever, tipo assim:

 digitalWrite(ledpin,HIGH);
         lcd.clear(); //limpa o display do LCD.
         lcd.setCursor(0,0); // escreve na primeira linha

         lcd.print("Lampada Ligada"); //imprime a string no display do LCD.
         delay(2000);

tente inserir o setCursor em seu codigo, se vc não conseguir me avisa que te paso o codigo, é que estou no trampo, ai nem tenho os codigos aqui. Abraço

Eu tentei mas continua do mesmo jeito !

A mensagem fica aparecendo eternamente e só muda quando eu aperto o controle para desligar.

e continua dando conflito com o controle ( demorando pra responder).

se puder passar o codigo .agradeço.

abraço.

Quebrei muito a cabeça com LCD.

Dica "ouro" que descobri "fuçando" na librarie liquidcristal do arduino:

Utilize o pino enable do LCD. Assim vc evita que ruídos interfiram na comunicação com o mesmo.

Outra coisa bem útil mas deve ser tratada com atenção:

Após acionar o relé, insira um delay(30); para depois limpara e escrever no lcd.

lcd.begin(16,2) também pode ser útil no lugar de lcd.clear();

Exemplo:

{

digitalWrite(rele,HIGH);

delay(30);

lcd.begin(16x2);

lcd.print("LAMPADA LIGADA");

delay(2000);

lcd.clear();

}

Espero ter ajudado

não resolveu,

não sei se usar > If e else if   dá serto !

porque eles ficam rodando , talvez por isso a mensagem não some mesmo com o (lcd.clear).

não teria como fazer com q o controle ficasse totalmente independente na programação,e aparecesse apenas o resultado no lcd ?

abraço

Experimente gravar o resultado recebido do IRremote em uma String e comparar ela!

Nunca usei IRremote, entao nao estou familiarizado com o sistema, mas fiz um exemplo de cod a baixo!

#include <LiquidCrystal.h>
#include <IRremote.h>
int RECV_PIN = 10;
IRrecv irrecv(RECV_PIN);
int ledpin=13;
decode_results results;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

String resultado = 0;

void setup()

{

  lcd.begin(16, 2);
  Serial.begin(9600);
  pinMode(ledpin,OUTPUT); // Configuração da Porta
  irrecv.enableIRIn();

}

void loop()
{

   if (irrecv.decode(&results))
     {  resultado = String(results.value);

        Serial.println(resultado);

        irrecv.resume();
     }
       if (resultado == "912274")
       {
         digitalWrite(ledpin,HIGH);
         lcd.clear(); //limpa o display do LCD. 
         lcd.print("Lampada Ligada"); //imprime a string no display do LCD.
         delay(2000);

         lcd.clear();

         resultado = 0;
      }
       else (resultado == "256914")
       {
        digitalWrite(ledpin,LOW);
        lcd.clear(); //limpa o display do LCD. 
        lcd.print("Lampada Desligada"); //imprime a string no display do LCD.
        delay(2000);

        lcd.clear();

        resultado = 0;
       }

     resultado = 0;

}

Pow valeu .

Resolveu parte do problema, á mensagem esta como eu queria.( aparece e some ).

E percebi uma coisa no controle, enquanto o ( arduino )  executa a parte do lcd, o controle

fica ( ocupado ), depois q passa os dois segundos, ai ele volta á responder.

Mas já resolveu o q eu queria !

Obrigado.

O Lance é o seguinte: vc estava fazendo a comparação da informação recebida diretamente da fonte nos dos blocos if{}. acontece que no momento que voce processa a informacao recebida uma vez, a fonte da informação limpa o buffer. Entao se a informacao nao batia com a primeira comparacao, quando passava para o segundo bloco, ela já era nula. Ai vc perde o dado.

Entao se vc num primeiro momento armazena em uma String, voce pode rodar todo o programa comparando ela inumeras vezes até encontrar algum bloco verdadeiro. Neste ponto voce executa o bloco e zera a String para que ela não volte a repetir a operacao na proxima vez que o loop rodar.

Caso nenhuma das comparacoes forem verdadeira, no final do loop, inclui um String = 0; para não repetir o loop.

No caso do seu ultimo problema, ele está relacionado ao delay. Para resolver esta situação, voce tem que trabalhar com debounce e millis(). É chatinho fazer isso, mas depois que voce pega o raciocinio, se torna muito facil e util em qualquer situação.

Grande Abraço.

Att.:

Rodrigo

E ai Jeferson, eu vi a data de sua duvida já faz um tempo, rsrs + com relação aos comandos em atraso por causa do delay, eu gostaria de saber se vc conseguiu resolver?

RSS

© 2022   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço