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.
}
Tags:
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?
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por