Estou criando um MENU de um projeto. Ele é acionado por dois botões com função para ligar e desligar. 

Na parte onde aparece o Menu os valores das temperaturas não se atualizam. Gostaria de saber como fazer de forma que fique atualizando em tempo real.

Segue o sketch em anexo.


#include <Wire.h> // Inclui a biblioteca interface a dois fios
#include <LiquidCrystal_I2C.h> // Inclui a biblioteca LCD I2C
LiquidCrystal_I2C lcd(0x27, 20, 4); // Seleciona o endereco que o LCD, linha
int botao = A0;
int sensorTemperatura1 = A1;
int transformador1 = 2;
int ventilador1 = 10;
int estadoBotao;
int valorLido1 = 0;
float temperatura1 = 0;
void setup () {
pinMode(botao, INPUT);
pinMode(transformador1, OUTPUT);
pinMode(ventilador1, OUTPUT);
pinMode(transformador1, LOW);
pinMode(ventilador1, LOW);
lcd.init();
lcd.clear();
lcd.setCursor(5,1);
lcd.print("ENERGIZADO");
}
void loop () {
estadoBotao = analogRead(botao);
estadoBotao = 1023;
while (estadoBotao >= 530){ // Nõo tem valor acima deste.
estadoBotao = analogRead(botao); //
}
if (estadoBotao < 530){ // Valor máximo alcancado pelo resistor
// BOTÃO VERDE.
if (estadoBotao >= 500 && estadoBotao <= 520) {
//LIGANDO OS VENTILADOR
lcd.clear();
lcd.setCursor(4,0);
lcd.print("VENTILADOR");
delay(300);
lcd.setCursor(0,1);
lcd.print("Ventilador1 Off");
delay(2000);
lcd.setCursor(0,1);
digitalWrite(ventilador1, HIGH);
lcd.print("Ventilador1 On");
delay(2500);
//LIGANDO OS TRANSFORMADORES
lcd.clear();
lcd.setCursor(2,0);
lcd.print("TRANSFORMADOR");
delay(300);
lcd.setCursor(0,2);
lcd.print("Trafo 5v Off");
delay(1500);
lcd.setCursor(0,3);
digitalWrite(transformador1, HIGH);
lcd.print("Trafo 12v On");
delay(2500);
temperatura();
menu();
}
// BOTÃO VERMELHO.
if (estadoBotao >= 300 && estadoBotao <= 350) {
//INFORMATIVO
delay(2000);
lcd.clear();
analogWrite(brilhoBacklight, 255);
lcd.setCursor(1,1);
lcd.print("Iniciando processo");
lcd.setCursor(4,2);
lcd.print("para desligar");
delay(2500);

//DESLIGANDO OS TRANSFORMADORES
lcd.clear();
lcd.setCursor(2,0);
lcd.print("TRANSFORMADOR");
delay(300);
lcd.setCursor(0,2);
lcd.print("Trafo 5v On");
delay(1000);
lcd.setCursor(0,3);
digitalWrite(transformador1, LOW);
lcd.print("Trafo 12v Off");
delay(2500);
//DESLIGANDO OS VENTILADORES
lcd.clear();
lcd.setCursor(4,0);
lcd.print("VENTILADOR");
lcd.setCursor(0,1);
lcd.print("Ventilador1 On");
delay(6000); // Tempo para refrigerar. (60000)
lcd.setCursor(0,1);
lcd.print("Ventilador1 Off");
digitalWrite(ventilador1, LOW);
delay(2500);
}
}
}
void temperatura() {
valorLido1 = analogRead(sensorTemperatura1);
temperatura1 = (valorLido1 * 0.00488);
temperatura1 = temperatura1 * 100;
}
void menu() {
lcd.setCursor(0,2);
lcd.print("Trafo 5v");
lcd.setCursor(15,2);
lcd.print(temperatura1);
lcd.setCursor(19,2);
lcd.print("C");
}

Exibições: 236

Anexos

Responder esta

Respostas a este tópico

Raphael, a temperatura não se atualiza pois o programa fica a maior parte do tempo parado no loop esperando o botão ser pressionado.

while (estadoBotao >= 530){ // Nõo tem valor acima deste.
estadoBotao = analogRead(botao); //

}

Não conheço toda a lógica da sua aplicação, mas uma forma de exibir o tempo todo é colocar ali os comandos:

while (estadoBotao >= 530){ // Nõo tem valor acima deste.
estadoBotao = analogRead(botao); //

temperatura();
menu();
}

Fazendo isso, talvez o lcd apresente um estado de "flickering". Se isso acontecer, para resolver mude a lógica para somente atualizar a temperatura.

Boa tarde Jose Augusto.

Vou testar sua dica. 

Vou enviar o sketch completo pra você dar uma olhada, pois são dois problemas: 1) a temperatura 2) um "letreiro" na última tela.

Segue em anexo o sketch completo.

Anexos

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço