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

Exibições: 252

Responder esta

Respostas a este tópico

Não sei se conseguirei te ajudar, mas vou fazer mais questionamentos.

Só par entender, você já testou no monitor serial se a leitura do termômetro está ocorrendo normalmente?

para leitura da temperatura eu uso a seguinte regra:

valorLido = analogRead(pinoSensor);// leitura da temperatura
double temperatura = (valorLido * 0.48857); // converte a leitura do LM35 em graus Celcius

Outro problema que você pode estar enfrentando é estar utilizando o delay para gerir os intervalos. Neste caso você tem duas opções.

A primeira é dividir as ações em funções e chama-las no loop, ex: um bloco para LCD e outro bloco para o botão e os relês. A segunda seria usa o millis no lugar do delay.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço