Ir ao conteúdo
  • Cadastre-se

Problema sensor de temperatura e LCD Arduino


Posts recomendados

Olá, estou com um probleminha aqui (Provavelmente código).

Coloquei no Arduino um relê, um LCD 16x2, um sensor de temperatura e um botão.

Programei ele para ficar no lcd uma mensagem e a temperatura, quando aperto o botão o rele liga e aparece no lcd "Lâmpada ligada" por dois segundos e voltar a temperatura, se apertar o botão novamente aparece "lâmpada desligada" por dois segundos e volta para a temperatura.

O problema é que a temperatura não está atualizando, fica fixa, ou seja ele não está atualizando a leitura do sensor. Todos os componentes estão ligados certinho.

Segue o código

#include <LiquidCrystal.h>

LiquidCrystal lcd(12,11,5,4,3,2);

const int lm35 = A0;

float temperatura = 0;

const int rele = 6;

const int botao = 10;

int estadorele = 0;

int estadobotao = 0;

int adclido=0;

void setup(){

pinMode(rele,OUTPUT);

pinMode(botao,INPUT);

lcd.begin(16,2);

lcd.clear();

}

void loop(){

estadobotao = digitalRead(botao);

adclido = analogRead(lm35);

temperatura = adclido*0.48828125 ;

lcd.setCursor(0,0);

lcd.print("Central Sala");

lcd.setCursor(0,1);

lcd.print("Temp: ");

lcd.setCursor(6,1);

lcd.print(temperatura);

estadobotao = digitalRead(botao);

if (estadobotao != 1)

{

while(digitalRead(botao) !=1)

{

delay(100);

}

estadorele = !estadorele;

digitalWrite(rele,estadorele);

}

if (digitalRead(rele) == 1)

{

lcd.clear();

lcd.setCursor(0,0);

lcd.print("LAMPADA");

lcd.setCursor(0,1);

lcd.print("LIGADA");

delay(2000);

lcd.clear();

}

if(digitalRead(rele)==0)

{

lcd.clear();

lcd.setCursor(0,0);

lcd.print("LAMPADA");

lcd.setCursor(0,1);

lcd.print("DESLIGADA ");

delay(2000);

lcd.clear();

}

}

Se alguem puder me salvar agradeço.

Abraços

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

wellcome...

bom .. não sei a linguagem do arduino (e nem quero saber) mas aparentemente você define temperatura como float e adclido como int. No caso, multiplicar um int por fração, em c, não dá resultado esperado. Tente definir adclido como float também ou fazer um casting (transformar temporariamente) o adclido em float

temperatura = (float)adclido*0.48828125
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 2 anos depois...

Se tiver problema na conta dá um delay pequeno para o arduino fazer a conta.

Provável os lcd clear que são ativados toda hora pelos if(digitalRead(rele)==0) e if(digitalRead(rele)==1) estão apagando a temperatura do mostrador e não aparecendo nada... enquanto eles tem tempo de exibição de 2segundos cada a temperatura vai ter alguns milissegundos do ciclo de* máquina e logo é interrompido pelos if do estado dos relés.

 

O while é bem curtinho é só para colocar o delay a mais que ele quer... se tivesse problema nele o código pararia o lcd ficaria exibindo a última mensagem e não sairia disso. Quem controla o relé é o if mais externo o  if (estadobotao != 1).

 

 

adicionado 0 minutos depois

@ju.virtual

Link para o comentário
Compartilhar em outros sites

@Bommu Perneta  grato pela resposta irmão, estou aprendendo a programar  e tenho aprendido bastante e realmente os delays ferram tudo as vezes rsrs,  mais coloquei outro codigo para ler a temperatura e funcionou, porém na variável que tinha esse problema e bem possivel que esse seja o problema. de qualquer maneira, grato pela atenção 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...