Ir ao conteúdo

Posts recomendados

Postado

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

  • Membro VIP
Postado

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
Postado

Olá, obrigado pela resposta.

Então, sem a parte do código que liga o módulo rele com um botão, a temperatura mostrada no LCD está correta(fiz os testes). Acredito que o problema esteja no recurso delay(), pois ele trava o código por 2s. O problema está em corrigir isso.

  • Membro VIP
Postado

ok. então deduzo que ele está pode estar travando aqui:

while(digitalRead(botao) !=1)...

considere inverter a lógica no sw ou hw

  • 2 anos depois...
Postado

Bom dia Jean, estou começando a aprender arduino agora e estou com o mesmo problema, quando entra no loop while ele ate printa no monitor a temperatura do sensor, mais so fica  printando a ultima temperatura  que estava quando entrou no while, vice conseguiu resolver esse problema?

Postado

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

Postado

@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 

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...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!