Boa tarde

Comprei um módulo RTC DS1307 e quebrei bastante a cabeça para configurar a hora no mesmo, mas acabei de descobrir uma forma simples sincronizando com o PC. Tem bastante tutoriais na net, mas ninguém falou o obvio

abaixo está um código muito comentado e genial que faz a sincronização:

//código relógio rtc simplificado testado


#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 rtc;

char hora[30];

void setup () {
Serial.begin(9600);
#ifdef AVR
Wire.begin();
#else
Wire1.begin(); // I2C 
#endif
rtc.begin();// aciona a função RTC

if (! rtc.isrunning()) {// se a função RTC não foi acionada
Serial.println("RTC não esta funcionando"); //
rtc.adjust(DateTime(__DATE__, __TIME__)); //caso rtc não esta funcionando ajusta a hora sincronizando com o PC
}
}

void loop () {
DateTime now = rtc.now();


sprintf( hora, "%02d:%02d:%02d", now.hour(), now.minute(), now.second() );
Serial.println(hora);
delay(1000);


}

O pulo do gato, foi que é preciso retirar a pilha do RTC para que ele pare de rodar, ai é só colocar de voltar ligar a placa rodar o código ver se no monitor serial se esta imprimindo a hora certinho e ser feliz.

Seu RTC estará com a hora configurada, basta gravar outro código, ou comentar a linha que sincroniza como no exemplo abaixo, para que ele não fique Sincronizando.

ex:

//if (! rtc.isrunning()) {
//Serial.println("RTC is NOT running!"); // se o RTC não esta rodando 
//rtc.adjust(DateTime(__DATE__, __TIME__)); // ajusta a hora sincronizando com o PC

Caso apareça no monitor serial 00:00:00 quando imprimir a hora, significa que ele travou, ai é necessario retirar a pilha, pois para o código o RTC esta funcionando.

No meu caso não possuo LCD, por isso precisava de uma solução via código e não havia encontrado uma dica mais simples.

Exibições: 4969

Anexos

Responder esta

Respostas a este tópico

tem um jeito mais simples que aprendi também, basta retirar o "!" da linha " if (! rtc.isrunning()) {"

desta forma ele ficara sempre atualizando, visto que o código ficara da seguinte forma "se RTC rodando atualize".

PARABÉNS!! me ajudou muito!

Eu imagino, demorei um monte para entender o funcionamento.

essa foi a parte que salvou! "o pulo do gato, foi que é preciso retirar a pilha do RTC para que ele pare de rodar"

como é que eu comento a linha que sincroniza, poderia colocá-la aqui pra mim por favor?

Você quer saber como criar um comentário ou remover algum trecho do código?

Não entendi sua dúvida.

deixa pra lá colega. obrigado.

Odilon, em liguagem C, para comentar um trecho do código, é só colocar "//" antes da linha a ser executada, desta forma, ela não é enviada ao arduino na hora de gravar o código. A versão comentada do trecho que faz a atualização do time, esta citado no exemplo.

Você pode deixa-lo no código sem problema algum ou remover este trecho inteiro caso queira.

obrigado. vou largar mão desse negócio, já que não entendo nada mesmo.

Tenho uma dica:

O ESP8266 possui um RTC interno e por ser capaz de se conectar a internet atraves de WiFi, ele é capaz de sincronizar sozinho pelo servidor NTP (Network Time Protocol)

http://www.esp8266.com/viewtopic.php?f=19&t=809

Boa sorte,

  'Eiju

essa informação é interessante, não sabia disso,

Só sabia que ele consultava a hora na internet, isso simplifica muito os projetos. 

seu eu ja to me batendo só com o arduino imagine com mais coisas ainda. obrigado.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço