Go Down

Topic: Ao decrementar números no display, o caracter da esquerda não apaga (Read 496 times) previous topic - next topic

CarlosCoelho

Boa noite,
não sou muito experiente em arduino mas estou a tentar criar um temporizador. Para isso pretendo incrementar ou decrementar um valor numérico com um encoder rotativo, KY-040, para ser visto num display HD44780 2X16.

o problema é que depois de no display atingir o 2º dígito (dezenas), se quiser decrementar o valor,  o dígito da direita (dezenas ) não apaga.

ou seja, do 9 para o 10 tudo certo, mas do 10 para o 9 , o dígito da direita continua lá, será que existe maneira de evitar isto?
Obrigado

bubulindo

Tens o código à mão?? Sem ver o código torna-se impossível de dizer como corrigir isto.

No entanto, posso explicar o que acontece. Imagina um LCD que só tem 4 caracteres.

No Arduino, quando escreveres 1234, ele guarda 1 na posição de memória 0 e por aí adiante. Quando escreves um 9, ele vai à posição 3 (as 4 posições são de 0 a 3) e mete lá um 9, mas não mexe nas 3 posições anteriores, daí tu ficares a ver 123 antes do 9.

Para resolveres isto, podes fazê-lo criando uma função que renova o conteúdo do lcd de x em x segundos. Antes de chamares esta função, chamas o método lcd.clear() e isso limpa toda a memória do LCD e depois escreves tudo de volta com os dados correctos.

Outra maneira de fazer isto é definires os sítios que tem dados permanentes e apenas limpares o local onde os dados que variam são escritos. No teu exemplo, se apenas vais mostrar 4 caracteres, podes simplesmente fazer um lcd.setCursor onde essa área começa e depois escrever um lcd.print("    ");. Após isto, podes repetir a instrução de lcd.setCursor e escrever o número que queres.

This... is a hobby.

CarlosCoelho

Obrigado pela resposta, se bem entendi o referido display não tem então a capacidade de apagar o caracter que está a mais, quando por ex. passo do 10 para o 9, uma vês que estes se encontram ainda em memória e só de lá sairão, depois de uma acção externa, como utilizar o   lcd.clear()  ou o  lcd.print("    ") , precedido do lcd.setCursor(x,x).

o código que estou a usar, de acordo com o teu conselho é este:
//Saída Display
int segundos = map(cont, 0, 255, 0, 128 );
lcd.clear();
lcd.setCursor(3, 0);
lcd.print(segundos);
delay(3);
obrigado esta dica ajudou bastante. :)

bubulindo

Sim, é isso.

Não é tanto acção externa, é mais a maneira como o LCD funciona em que guarda em memória o que lá tem e o Arduino ao escrever apenas acede a determinadas posições de memória.

This... is a hobby.

Go Up