Boa noite.

Estou fazendo um controlador de temperatura, e estou com um problema quando estou setando uma temperatura negativa. Alem de sair fora de posicao ele desloca uma casa para a esquerda. Segue o codigo do projeto.

include <LiquidCrystal.h> // Inclui a biblioteca para utilizar o LCD.
#define sensor1 0 // Define o pino A0 como “sensor1”
#define sensor2 1 // Define o pino A1 como "sensor2"

////////////////////////////////////////////VARIAVEIS BOTAO E ESTAGIO BOTAO////////////////////////////////////////////////////////////

const int BUTTON1P = 22; //Pino de entrada do botao 1 POSITIVO
const int BUTTON1N = 23; //Pino de entrada do botao 1 NEGATIVO
const int BUTTON2P = 24; //Pino de entrada do botao 2 POSITIVO
const int BUTTON2N = 25; //Pino de entrada do botao 2 NEGATIVO
int STAGEBUTTON1P = 0; //Variavel que armazenara o estado do botao POSITIVO
int STAGEBUTTON1N = 0; //Variavel que armazenara o estado do botao NEGATIVO
int STAGEBUTTON2P = 0; //Variavel que armazenara o estado do botao POSITIVO
int STAGEBUTTON2N = 0; //Variavel que armazenara o estado do botao NEGATIVO
int SET1; //Variavel que armazenara a temperatura Setada do PRIMEIRO Sensor
int SET2; //Variavel que armazenara a temperatura Setada do SEGUNDO Sensor
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////VARIAVEIS DOS SENSORES E TEMPERATURA//////////////////////////////////////////////////

int Ventrada1; // Variável para ler o sinal do pino0 do Arduino
int Ventrada2; // Variável para ler o sinal do pino1 do Arduino
float Temperatura1; // Variável que recebe o valor convertido para temperatura1.
float Temperatura2; // Variável que recebe o valor convertido para temperatura2.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

LiquidCrystal lcd (12, 11, 5, 4, 3, 2); // Esta função acima declara quais os pinos do Arduino serão utilizados para o controle do LCD

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void setup() {

lcd.begin(16, 2); // Diz para o Arduino que o display é 16x2.
lcd.setCursor(0, 0); // Move o cursor do display para a primeira COLUNA na LINHA 0.
lcd.print("1|TS= TA= "); // Manda o texto para a tela do display
lcd.setCursor(0, 1); // Move o cursor do display para a primeira COLUNA0 na LINHA 1.
lcd.print("2|TS= TA= "); // Manda o texto para a tela do display


//////////////////////////////////////////////////SETA OS PINOS DOS BOTOES COMO ENTRADAS////////////////////////////////////////////////

pinMode(BUTTON1P, INPUT); //Seta o pino como botao como entrada
pinMode(BUTTON1N, INPUT);
pinMode(BUTTON2P, INPUT); //Seta o pino como botao como entrada
pinMode(BUTTON2N, INPUT);


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


}

void loop()
{
///////////////////Botao///////////////////////////////
STAGEBUTTON1P = digitalRead(BUTTON1P); //le e recebe o valor do botao
STAGEBUTTON1N = digitalRead(BUTTON1N);
STAGEBUTTON2P = digitalRead(BUTTON2P); //le e recebe o valor do botao
STAGEBUTTON2N = digitalRead(BUTTON2N);

if (STAGEBUTTON1P == HIGH) {
SET1 = SET1+1;
lcd.setCursor(7, 0); // Move o cursor do display para a segunda linha.
lcd.print(" ");
lcd.setCursor(7, 0); // Move o cursor do display para a segunda linha.
lcd.print(SET1); // Exibe o valor de temperatura no display.

} if (STAGEBUTTON1N == HIGH) {
SET1 = SET1-1;
lcd.setCursor(6, 0); // Move o cursor do display para a segunda linha.
lcd.print(" ");
lcd.setCursor(6, 0); // Move o cursor do display para a segunda linha.
lcd.print(SET1); // Exibe o valor de temperatura no display.

} if (STAGEBUTTON2P == HIGH) {
SET2 = SET2+1;
lcd.setCursor(7, 1); // Move o cursor do display para a segunda linha.
lcd.print(SET2);

} if (STAGEBUTTON2N == HIGH) {
SET2 = SET2-1;
lcd.setCursor(7, 1); // Move o cursor do display para a segunda linha.
lcd.print(SET2);

}


Ventrada1 = analogRead (sensor1); // Manda o Arduino ler o pino e armazena o valor em “Ventrada1”.
Temperatura1=(500*Ventrada1)/1023; // Converte o valor de tensão em temperatura e armazena na variável “Temperatura1”
lcd.setCursor(13, 0); // Move o cursor do display para a segunda linha.
lcd.print(Temperatura1); // Exibe o valor de temperatura no display.
lcd.print(" C"); // Escreve “C” para dizer que a escala é Celsius.

Ventrada2 = analogRead (sensor2); // Manda o Arduino ler o pino e armazena o valor em “Ventrada2”.
Temperatura2=(500*Ventrada2)/1023; // Converte o valor de tensão em temperatura e armazena na variável “Temperatura2”
lcd.setCursor(13, 1); // Move o cursor do display para a segunda linha.
lcd.print(Temperatura2); // Exibe o valor de temperatura no display.
lcd.print(" C"); // Escreve “C” para dizer que a escala é Celsius.


delay(1000); // Aguarda 1 segundo para efetuar uma nova leitura de temperatura.

}

Exibições: 1157

Responder esta

Respostas a este tópico

Oi  AFM, bom dia,

o LCD 16x2 é um cara um pouco "burro", e portanto ao usá-lo é preciso ficar atento ao seguinte:

Ao escrever um valor no LCD ele escreve à partir de onde mandamos e usa quantas casas precisar  para o numero.  

Se escrever  2890 a partir da 7a casa, ele vai mostra 2980, depois você escreve novamente nesta casa 44,

ele mostra assim: 4490, pois o 90 ficou lá da operação anterior.

Se você escrever -3894 e depois escrever 35, ficara assim: 35894.

As soluções para isto são:

Ou enviar antes de cada escrita um lcd.clear(), que limpa o LCD, mas aí tem que escrever tudo que quiser que apareça novamente, ou definir casas para cada informação, e apagar cada conjunto de casas antes de enviar novos dados.

Por exemplo:

Se a temperatura vai de -99.00 até 99.00, você tem que reservar 6 casas, e antes de enviar um novo valor,  enviar   lcd.print("      "); com seis casa em branco para limpar o valor anterior.

Espero que isto resolva sua dificuldade.

Rui

Boa tarde Rui.

Cara.. Muito obrigado, ajudou e muito... esse topico foi resolvido agora aproveitando o mesmo seguimento, eu mando o comando print na posicao 5, peço para motrar o numero 10 ele aparece blz... só que se colocar o numero 5 ao invez do numero 5 ficar na posicao 5 ele vai para a 4, teria algum jeito de mandar ele ficar sempre na direita? Ou tenho que sempre preencher com 0 na frente?

Obrigado mais uma vez.

Oi AFM,

para conseguir isto, você pode usar um recurso do LCD, que é  lcd.rightToLeft(),

mas:

ao escrever assim você tem que primeiro inverter o que vai ser escrito. Assim:

Quer escrever  -5,27, então tem que enviar para o LCD  72,5-.

Rui

E quando se trata de uma variavel?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço