ЧАСЫ РЕАЛЬНОГО ВРЕМЕНИ I2C

DimaGilev
Offline
Зарегистрирован: 05.03.2016
/*
 * TimeRTC.pde
 * example code illustrating Time library with Real Time Clock.
 * 
 */

#include <TimeLib.h>
#include <Wire.h>
#include <DS1307RTC.h>  // a basic DS1307 library that returns time as a time_t

void setup()  {
  Serial.begin(9600);
  while (!Serial) ; // wait until Arduino Serial Monitor opens
  setSyncProvider(RTC.get);   // the function to get the time from the RTC
  if(timeStatus()!= timeSet) 
     Serial.println("Unable to sync with the RTC");
  else
     Serial.println("RTC has set the system time");      
}

void loop()
{
  if (timeStatus() == timeSet) {
    digitalClockDisplay();
  } else {
    Serial.println("The time has not been set.  Please run the Time");
    Serial.println("TimeRTCSet example, or DS1307RTC SetTime example.");
    Serial.println();
    delay(4000);
  }
  delay(1000);
}

void digitalClockDisplay(){
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.print(" ");
  Serial.print(day());
  Serial.print(" ");
  Serial.print(month());
  Serial.print(" ");
  Serial.print(year()); 
  Serial.println(); 
}

void printDigits(int digits){
  // utility function for digital clock display: prints preceding colon and leading 0
  Serial.print(":");
  if(digits < 10)
    Serial.print('0');
  Serial.print(digits);
}

 

DimaGilev
Offline
Зарегистрирован: 05.03.2016
 
 
 
 
 
 
 
 
C:\Users\Дмитрий\Documents\Arduino\libraries\Time-master\examples\TimeRTC\TimeRTC.ino: In function 'void loop()':
 
TimeRTC:24: error: 'digitalClockDisplay' was not declared in this scope
 
C:\Users\Дмитрий\Documents\Arduino\libraries\Time-master\examples\TimeRTC\TimeRTC.ino: In function 'void digitalClockDisplay()':
 
TimeRTC:37: error: 'printDigits' was not declared in this scope
 
Несколько библиотек найдено для "TimeLib.h"
 Используется: C:\Users\Дмитрий\Documents\Arduino\libraries\Time-master
Не используется: C:\Users\Дмитрий\Documents\Arduino\libraries\Time
Не используется: C:\Users\Дмитрий\Documents\Arduino\libraries\Time
Не используется: C:\Users\Дмитрий\Documents\Arduino\libraries\Time
Не используется: C:\Users\Дмитрий\Documents\Arduino\libraries\Time
Несколько библиотек найдено для "DS1307RTC.h"
 Используется: C:\Users\Дмитрий\Documents\Arduino\libraries\DS1307RTC
Не используется: C:\Users\Дмитрий\Documents\Arduino\libraries\DS1307RTC-master
exit status 1
'digitalClockDisplay' was not declared in this scope
DimaGilev
Offline
Зарегистрирован: 05.03.2016

В первый раз подключаю часы реального времени, проблема с библиотеками, качал и через IDE и через arduino.cc и с других источников. везде ругается что не находит что-то. Подскажите пожалуйста, как самому дополнять библиотеки в таких случаях? часто с этим сталкиваюсь( 

T.Rook
Offline
Зарегистрирован: 05.03.2016

Попробуйте перенести код с 34 по 54 в строку 20. Может и ошибки пропадут.

А Ваш вопрос #2 я не понял совсем :(

DimaGilev
Offline
Зарегистрирован: 05.03.2016

Я имел в виду часто библиотеки не работают, даже с официального сайта. Хотел узнать как с этим бороться. из кучи библиотек я не могу запустить и проверить, везде ошибки.. А за ответ благодарю, сайчас попробую

T.Rook
Offline
Зарегистрирован: 05.03.2016

DimaGilev пишет:

 Хотел узнать как с этим бороться.

Универсальный ответ: читать ошибки и разбираться почему они возникли.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

DimaGilev, Вам правильно подсказывают. Перенесите две функции - digitalClockDisplay и  printDigits (со всем их содержимым естественно) выше, перед функциями setup и loop.

DimaGilev
Offline
Зарегистрирован: 05.03.2016

Спасибо, скетч работает. я уже по этой библиотеке во всех скетчах функции наверх перенес. На мониторе порта показывают какие то каракули, вот пытаюсь теперь понять

1)каким образом задать время

2) как проверить сам модуль часов реального времени? ВКЛ/ВЫКЛ модуля?  По последовательному порту выходят хаотичные цифры и буквы, отключаю модуль, надеялся увидеть изменения. Как цифры бежали, так и бегут)) 

DimaGilev
Offline
Зарегистрирован: 05.03.2016

Проверил по последовательному порту, появилось время, дата. 1970 год. время идет... перезагружаю Ардуино, время сбрасывается, отключаю питание у Ардуино, время сбрасывается.. что то не пашет пока ничего, и время до сих пор не могу задать

 

Genri5
Offline
Зарегистрирован: 31.05.2016

Я не пойму, ты уже создавал подобную тему:http://arduino.ru/forum/programmirovanie/ne-rabotayut-biblioteki.  Тебе давались ссылки.

Чего жевать пережеванное уже не один раз. Что так трудно в поисковике набрать DS1307  и вывалится полно ссылок или лень матушка.....

nik182
Offline
Зарегистрирован: 04.05.2015

У меня сбрасывалось, пока не пропаял батарейкины контакты. И так бывает.

DimaGilev
Offline
Зарегистрирован: 05.03.2016

.

 

DimaGilev
Offline
Зарегистрирован: 05.03.2016

Genri5 пишет:

Я не пойму, ты уже создавал подобную тему:http://arduino.ru/forum/programmirovanie/ne-rabotayut-biblioteki.  Тебе давались ссылки.

Чего жевать пережеванное уже не один раз. Что так трудно в поисковике набрать DS1307  и вывалится полно ссылок или лень матушка.....

 

Уважаемый, во первых -тему я открыл впервый раз, во вторых- На форуме ничего внятного и похожего на мою проблему я не нашел, в -третьих в интернете я качал кучу библиотек, везде проблемы. В четвертых- ваша ссылка не работает. В пятых- этот форум и предназначен для того что бы интересоваться, потому что встречаются люди с одинаковыми проблемами. 

DimaGilev
Offline
Зарегистрирован: 05.03.2016

вот это ответ! спасибо. ТОже думаю пропоять надо) 

DimaGilev
Offline
Зарегистрирован: 05.03.2016

Если кому- нибудь нужен скетч для того что бы задать время на часах реального времени и вывести их на дисплей 16Х2

// функции даты и времени с использованием часов реального времени DS1307, подключенные по I2C. В скетче используется библиотека Wire lib

#include <Wire.h>

#include "RTClib.h"

RTC_DS1307 RTC;

void setup () {

Serial.begin(57600);

Wire.begin();

RTC.begin();

if (! RTC.isrunning()) {

Serial.println("RTC is NOT running!");

// строка ниже используется для настройки даты и времени часов если удалить // на 23 строке и заргузить в ардуино!!!

 //RTC.adjust(DateTime(__DATE__, __TIME__));

}

}

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();

Serial.print(" since 1970 = ");

Serial.print(now.unixtime());

Serial.print("s = ");

Serial.print(now.unixtime() / 86400L);

Serial.println("d");

// рассчитываем дату: 7 дней и 30 секунд

DateTime future (now.unixtime() + 7 * 86400L + 30);

Serial.print(" now + 7d + 30s: ");

Serial.print(future.year(), DEC);

Serial.print('/');

Serial.print(future.month(), DEC);

Serial.print('/');

Serial.print(future.day(), DEC);

Serial.print(' ');

Serial.print(future.hour(), DEC);

Serial.print(':');

Serial.print(future.minute(), DEC);

Serial.print(':');

Serial.print(future.second(), DEC);

Serial.println();

Serial.println();

delay(3000);

}

ПОСЛЕ ТОГО КАК ВЫ ЗАГРУЗИТЕ ПЕРВЫЙ СКЕТЧ, ЗАГРУЖАЙТЕ ВОТ ЭТОТ. ТОЛЬКО УКАЖИТЕ ПИНЫ ТЕКСТОВОГО ДИСПЛЕЯ

#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal.h>
LiquidCrystal _lcd1(9, 8, 4, 5, 6, 7);
int _dispTempLength1=0;
boolean _isNeedClearDisp1;

RTC_DS1307  _RTC1;
DateTime  _tRTC1;

int _disp1oldLength = 0;
void setup()
{
Wire.begin();
_RTC1.begin();
_lcd1.begin(16, 2);
}
void loop()
{if (_isNeedClearDisp1) {_lcd1.clear(); _isNeedClearDisp1= 0;}
_tRTC1 = _RTC1.now();




if (1) {
_dispTempLength1 = (((((String((_tRTC1.hour()), DEC))) + (String(":")) + ((String((_tRTC1.minute()), DEC))) + (String(":")) + ((String((_tRTC1.second()), DEC)))))).length();
if (_disp1oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor(int((16 - _dispTempLength1)/2), 0);
_lcd1.print(((((String((_tRTC1.hour()), DEC))) + (String(":")) + ((String((_tRTC1.minute()), DEC))) + (String(":")) + ((String((_tRTC1.second()), DEC))))));
} else {
if (_disp1oldLength > 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;} 
}




}

 

вСЕМ СПАСИБО!