Eu fiz um código simples para exibir uma contagem regressiva no visor LCD.
O LCD exibe a contagem regressiva normal até 10 abaixo disso, ao invés de aparecer 09 -> 08... o número passa para a direita, ficando 90 -> 80-> ... Apesar de se tratar das unidades 9 e 8 respectivamente, no visor aparece como se fosse 90 e 80.
A impressão que eu tenho, é que a exibição do número no regressão é a mesma que na progressão, onde na mudança de unidade, troca o número da esquerda.
A contagem regressiva é exibida assim:
13 12 11 10 90 08 70 60 50 40 30 20 10 00.
Quando deveria ficar assim:
13 12 11 10 09 08 07 06 05 04 03 02 01 00.
Este é o código que eu fiz:
}
Tags:
Oi Sr. M, boa tarde.
Teste este code:
Vai aparecer assim: 13 12 11 10 9 8 7 6 5 4 3 2 1 0.
Rui
Boa tarde
A noite eu vou testar, agora estou sem meu arduino por perto.
Vamos com calma; eu não entendi o que você fez. Mandou o LCD imprimir 5 espaços vazios depois do número.
Qual a função disso? Como isso vai resolver esse problema e por que?
O código está certo. O problema é que o LCD mantém o último caractere na tela.
Para corrigir, limpe o lcd depois do delay:
delay(500);
lcd.clear();
Eu já tinha visto isso. É uma solução horrível.
Mas já que você tocou no assunto, tem como o LCD limpar uma linha ou coluna específica?
Tem sim. É a solução que o Rui te enviou, colocando 5 espaços vazios.
Outra forma (melhor prática) é criando uma função para formatar o número com o número de casas desejadas.
Certa vez eu precisei formatar um número com zeros à esquerda. Existem funções prontas para isso nas bibliotecas do Arduino, mas preferi desenvolver uma específica:
Veja, essa função recebe um número do tipo float e devolve uma string formatada com o caractere que você quiser à esquerda. Você passa o número de dígitos e qual caractere quer o preenchimento.
dessa forma o lcd vai exibir sempre corretamente:
//Fill a float value with a desired pattern on the left
String leftPad(float value, int numDigits, char pattern) {
String retVal = String((int)value); //Convert the value to String without decimal part
// Fill with the pattern on the left
int lenPad = numDigits - retVal.length();
for (int x = 1; x <= lenPad; x++){
retVal = pattern + retVal;
}
return retVal;
}
No meu caso eu imprimi a humidade do ambiente com espaços à esquerda:
lcd.print("Humidity: " + leftPad(dhtHumidity,5,' ') + "%");
Qual é a biblioteca que faz isso?
Estava pensando em fazer uma biblioteca para formatação de números, mas se já tiver pronta...
sprintf() para ints:
https://liudr.wordpress.com/2012/01/16/sprintf/
dtostrf()
Para floats:
http://forum.arduino.cc/index.php?topic=73083.0
Não fiquei satisfeito com essas, por isso criei minha própria função.
A escolha vai depender do tipo de aplicação que vc está desenvolvendo. (rapidez, economia de memória, etc)
Posso dar uma sugestão bem gambiarra?
e se você colocar um "if" verificando se o numero e menor que 10 ai se for vc da um clean no LCD e escreve de novo a contagem dai vai sumir este zero misterioso ai q esta te incomodando.
sempre que a contagem chegar a 9 ela da um clean na tela LCD.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup(){
lcd.begin(16, 2);
}
void loop() {
for (int i=15;i<-1;i--){
delay(500);
if (i==9){lcd.clear();}
lcd.setCursor(1, 0);
lcd.print("CONT. REGRESSIVA");
lcd.setCursor(1, 1);
lcd.print("TEMPO: " );
lcd.print(i);
}
}
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por