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 ..
Tags:
As respostas para este tópico estão encerradas.
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?
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por