Olá, pessoal!

Montei o chip DS1307(RTC) na protoboard e liguei ao arduino. Liguei também um LCD com placa I2C para funcionar como um relógio calendário. Funcionou, mas percebi que os segundos pula um numero aproximadamente a cada 9 segundos. O quê está acontecendo. Quando liguei o LCD no arduino sem o I2C funcionou perfeitamente. Preciso do LCD no I2C porque vou ligar uma shield de cartão SD. Como posso resolver o problema?

Exibições: 200

Responder esta

Respostas a este tópico

Mostre o código que você utilizou, lembrando que não deve ter nenhum comando de delay no seu código para que ele mostre a progressão dos segundos corretamente.

Boa noite JFMA

sugestão:

Remova seu sketch da área de texto do seu tópico;

Clique em : " Deseja carregar arquivos? " e depois em " Escolher arquivo" e anexe o arquivo
com o seu sketch.

RV

Certo.

Aqui vai o sketch anexado.

Anexos

Remova as linhas

lcd.ini(); 

lcd.backlight();

e coloque-as dentro do void setup. Senão ele vai ficar inicializando o display em toda a passada do loop, fazendo a tela ficar piscando.

resolveu o problema da contagem, mas quando os segundos chega em 59 deveria zerar, nos primeiros dez segundos fica o numero 9 no final.

Ele conta de 1 a 9, mas com um 9 no final, mostrando por exemplo: o 1 aparece como 19, o 2 como 29.

JFMA, 

primeiramente obrigado por seguir a recomendação.

O que está ocorrendo é o seguinte.

O LCD guarda tudo que mandamos pra ele, a não ser que o reinicie ou de um LCD.clear().

Imagine. Você mandou 59 para a posição X da linha,

e em seguida mandou o 1.  O 5 é sobreposto pelo 1, mas o 9 continua lá.

O Ideal é, antes de mandar os valores , é enviar um LCD.print("    ") para apagar 

o espaço que queremos usar. Dentro dos " " colocamos qtos espaço precisaremos.

Espero ter ajudado.

RV

Aí é questão de acertar a exibição no display de acordo com o número de dígito que será mostrado.

if(horas<10)lcd.print("0");
lcd.print(horas);
lcd.print(":");
if(minutos<10)lcd.print("0");
lcd.print(minutos);
lcd.print(":");
if(segundos<10)lcd.print("0");
lcd.print(segundos);

Valeu pessoal, funcionou.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço