Вчера прицепил RTC модуль реального времени на базе DS1307, собственно пытался уже давно но ничего не получалось ... вначале была проблема связи модуля с ардуиной, дата и время были премерно следующие "2165/165/165 165:165:85", потом таймер каждый раз начинался заново при отключении питания, ну и в заключении долго пытался найти как синхронизировать время.
Видео- http://youtu.be/reKBAI_8LaI
В начале обязательно подтягиваем шину I2С к +5В через резисторы 10к, даже если устройство на шине одно, без резисторов работать не будет.
Библиотеки из примера http://zelectro.cc/Media/Default/%D0...%8B/RTClib.zip
http://zelectro.cc/Media/Default/%D0...D1%8B/Time.zip
Заливаем в ардуино скетч:
Открываем окно терминала, далее переходим по ссылке http://www.bl2.ru/programing/timestamp.html, быстро копируем Текущее Unix время,например: 1423495561, и так же быстро вставляем текст в окно терминала комбинацией клавиш Ctrl + v, нажимаем отправить! Всё! время выставлено, проверяем:PHP код:#include <Wire.h>
#include "RTClib.h"
#include <Time.h>
RTC_DS1307 RTC;
void setup () {
Serial.begin(9600);
Wire.begin();
RTC.begin();
}
void loop () {
time_t curTime = 0;
// На Serial поступит время в формате unixtime
if (Serial.available() > 0)
{
int eps = millis();
time_t coef = 1000000000;
while (coef > 0)
{
byte b = Serial.read();
if (b == 255)
{
continue;
}
curTime += coef*(b-'0');
coef /= 10;
}
// Устанавливаем считанное по байтам время в RTC
RTC.adjust(curTime + (millis()-eps)/1000);
}
}
PHP код:#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
void setup () {
Serial.begin(9600);
Wire.begin();
RTC.begin();
}
void loop () {
// Определяем время
DateTime now = RTC.now();
// Выводим время в монитор порта
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
delay(1000);
}




Ответить с цитированием