Ошибка в arduino 1.8.1

Bald
Offline
Зарегистрирован: 17.03.2016

В среде 1.6.6 ошибки нет, а в 1.8.1 есть

Вот код

//формат указания текущего времени "ДД.ММ.ГГ чч:мм:сс"
//где ДД - день, ММ - месяц, ГГ - год, чч - часы, мм - минуты, сс - секунлы
//ГГ - от 00 до 99 для 2000-2099 годов
 
#include <Time.h>
#include <DS1307RTC.h>
 
bool isTimeSet = false; //флаг, указывающий на то, была ли уже задана дата
 
void setup()  {
  Serial.begin(9600);
  while (!Serial) ; // Только для платы Leonardo
  setSyncProvider(RTC.get);   // получаем время с RTC
  if (timeStatus() != timeSet)
    Serial.println("Unable to sync with the RTC"); //синхронизация не удаласть
  else
    Serial.println("RTC has set the system time");
}
 
void loop()
{
  if (Serial.available()) { //поступила команда с временем
      setTimeFromFormatString(Serial.readStringUntil('\n'));
      isTimeSet = true; //дата была задана
  }
  if (isTimeSet)  //если была задана дата
  {
    digitalClockDisplay(); //вывод времени
  }
  delay(1000);
}
 
void digitalClockDisplay() {
  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) {
  //выводим время через ":"
  Serial.print(":");
  if (digits < 10)
    Serial.print('0');
  Serial.print(digits);
}
 
void setTimeFromFormatString(String time)
{
  //ДД.ММ.ГГ чч:мм:сс
  int day = time.substring(0, 2).toInt();
  int month = time.substring(3, 5).toInt();
  int year = time.substring(6, 8).toInt();
  int hours = time.substring(9, 11).toInt();
  int minutes = time.substring(12, 14).toInt();
  int seconds = time.substring(15, 17).toInt();
  TimeElements te;
  te.Second = seconds;
  te.Minute = minutes;
  te.Hour = hours;
  te.Day = day;
  te.Month = month;
  te.Year = year + 30; //год в библиотеке отсчитывается с 1970. Мы хотим с 2000
  time_t timeVal = makeTime(te);
  RTC.set(timeVal);
  setTime(timeVal);
}
 
Вот ошибка
 
Arduino: 1.8.1 (Windows 7), Плата:"Arduino/Genuino Uno"
In file included from D:\Arduino\Radio _Clock\Setup_Clock\Setup_Clock.ino:6:0:
C:\Users\Bald\Documents\Arduino\libraries\DS1307RTC/DS1307RTC.h:19:22: error: 'tmElements_t' has not been declard
     static bool read(tmElements_t &tm);
                      ^
C:\Users\Bald\Documents\Arduino\libraries\DS1307RTC/DS1307RTC.h:20:23: error: 'tmElements_t' has not been declared
     static bool write(tmElements_t &tm);
                       ^
D:\Arduino\Radio _Clock\Setup_Clock\Setup_Clock.ino: In function 'void setup()':
Setup_Clock:13: error: 'setSyncProvider' was not declared in this scope
   setSyncProvider(RTC.get);   // получаем время СЃ RTC
                          ^
Setup_Clock:14: error: 'timeStatus' was not declared in this scope
   if (timeStatus() != timeSet)
                 ^
Setup_Clock:14: error: 'timeSet' was not declared in this scope
   if (timeStatus() != timeSet)
                       ^
D:\Arduino\Radio _Clock\Setup_Clock\Setup_Clock.ino: In function 'void digitalClockDisplay()':
Setup_Clock:34: error: 'hour' was not declared in this scope
   Serial.print(hour());
                     ^
Setup_Clock:35: error: 'minute' was not declared in this scope
   printDigits(minute());
                      ^
Setup_Clock:36: error: 'second' was not declared in this scope
   printDigits(second());
                      ^
Setup_Clock:38: error: 'day' was not declared in this scope
   Serial.print(day());
                    ^
Setup_Clock:40: error: 'month' was not declared in this scope
   Serial.print(month());
                    ^
Setup_Clock:42: error: 'year' was not declared in this scope
   Serial.print(year());
                     ^
D:\Arduino\Radio _Clock\Setup_Clock\Setup_Clock.ino: In function 'void setTimeFromFormatString(String)':
Setup_Clock:63: error: 'TimeElements' was not declared in this scope
   TimeElements te;
   ^
Setup_Clock:64: error: 'te' was not declared in this scope
   te.Second = seconds;
   ^
Setup_Clock:70: error: 'makeTime' was not declared in this scope
   time_t timeVal = makeTime(te);
                              ^
Setup_Clock:72: error: 'setTime' was not declared in this scope
   setTime(timeVal);
exit status 1
'setSyncProvider' was not declared in this scope
 
 

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

100500 раз уже объясняли, перенесите все функции до setup

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Во-первых - http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

Во-вторых, Вы бредите, милейший. То, что Вы назвали кодом не компилируется ни в какой версии IDE. Например, в функцииdigitalClockDisplay() используются функциии minute() и second() которых в коде просто нет. Это не скомпилирует никакая версия. Или Вы дали нам неполный код или просто троллите нас  с непонятной целью.

arDubino
Offline
Зарегистрирован: 12.01.2017

правильно все ему дали. у него там присвоение из библиотеки тайм.

видимо эта библиотека за это время сменила свои хар-ки вот и ответ. и там другие свойства

arDubino
Offline
Зарегистрирован: 12.01.2017
 int day = time.substring(0, 2).toInt();
  int month = time.substring(3, 5).toInt();
  int year = time.substring(6, 8).toInt();
  int hours = time.substring(9, 11).toInt();
  int minutes = time.substring(12, 14).toInt();
  int seconds = time.substring(15, 17).toInt();
вот эту хрень надо заменить на новое скорее всего раньше там была строка а теперь скорее всего там уже нормально и сразу дает все эти значения без вырезания кусков и преобразования в целое
arDubino
Offline
Зарегистрирован: 12.01.2017
The functions available in the library include:

hour();            // the hour now  (0-23)
minute();          // the minute now (0-59)
second();          // the second now (0-59)
day();             // the day now (1-31)
weekday();         // day of the week (1-7), Sunday is day 1
month();           // the month now (1-12)
year();            // the full four digit year: (2009, 2010 etc)

 

https://github.com/PaulStoffregen/Time

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ах, сори time.h то я и не заметил. Вот что значит код по-дурацки вставлен. В общем, моё замечание "Во-первых" остаётся в силе - тот самый случай.

Bald
Offline
Зарегистрирован: 17.03.2016

ЕвгенийП пишет:

.... Вот что значит код по-дурацки вставлен. В общем, моё замечание "Во-первых" остаётся в силе - тот самый случай.

Самый дельный совет. Но кнопку редактировать я не нашел.

А заработало когда библиотеки с другого мееста скачал. Немного загадка осталась. Но да ладно, небуду вас нервировать нубскими вопросами

arDubino
Offline
Зарегистрирован: 12.01.2017

:)))) загодок никаких нет там автор библиотеки ее как раз переделал в той версии т.е. ты использовал старую.

сейчас можно тупо было писать типа time.day() вместо int day = time.substring(0, 2).toInt(); и переменные не нужны вообще.

TimeElements te;
  te.Second = time.second();
  te.Minute = time.minute();
  te.Hour = time.hour();
  te.Day = time.day();
  te.Month = time.month();
  te.Year = time.year();
arDubino
Offline
Зарегистрирован: 12.01.2017

а там у тебя еще вывод тогда переменным присвой или опять добавить time.

Bald
Offline
Зарегистрирован: 17.03.2016

Я так понимаю эта функция для настройки времени. А этим кодом я пользуюсь только для настройки


void setTimeFromFormatString(String time)
{
  //ДД.ММ.ГГ чч:мм:сс
  int day = time.substring(0, 2).toInt();
  int month = time.substring(3, 5).toInt();
  int year = time.substring(6, 8).toInt();
  int hours = time.substring(9, 11).toInt();
  int minutes = time.substring(12, 14).toInt();
  int seconds = time.substring(15, 17).toInt();
  TimeElements te;
  te.Second = seconds;
  te.Minute = minutes;
  te.Hour = hours;
  te.Day = day;
  te.Month = month;
  te.Year = year + 30; //год в библиотеке отсчитывается с 1970. Мы хотим с 2000
  time_t timeVal = makeTime(te);
  RTC.set(timeVal);
  setTime(timeVal);
}

 

arDubino
Offline
Зарегистрирован: 12.01.2017

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

arDubino
Offline
Зарегистрирован: 12.01.2017

пример из стандартов для библиотеки

/*
  DS3231: Real-Time Clock. Date Format
  Read more: www.jarzebski.pl/arduino/komponenty/zegar-czasu-rzeczywistego-rtc-ds3231.html
  (c) 2014 by Korneliusz Jarzebski
*/
 
#include <Wire.h>
#include <DS3231.h>
 
DS3231 clock;
RTCDateTime dt;
 
void setup()
{
  Serial.begin(9600);
 
  // Initialize DS3231
  Serial.println("Initialize DS3231");;
  clock.begin();
 
  // Set sketch compiling time
  clock.setDateTime(__DATE__, __TIME__);
 
  // Set from UNIX timestamp
  // clock.setDateTime(1397408400);
 
  // Manual (YYYY, MM, DD, HH, II, SS
  // clock.setDateTime(2014, 4, 13, 19, 21, 00);
}
 
void loop()
{
  dt = clock.getDateTime();
 
  Serial.print("Long number format:          ");
  Serial.println(clock.dateFormat("d-m-Y H:i:s", dt));
 
  Serial.print("Long format with month name: ");
  Serial.println(clock.dateFormat("d F Y H:i:s",  dt));
 
  Serial.print("Short format witch 12h mode: ");
  Serial.println(clock.dateFormat("jS M y, h:ia", dt));
 
  Serial.print("Today is:                    ");
  Serial.print(clock.dateFormat("l, z", dt));
  Serial.println(" days of the year.");
 
  Serial.print("Actual month has:            ");
  Serial.print(clock.dateFormat("t", dt));
  Serial.println(" days.");
 
  Serial.print("Unixtime:                    ");
  Serial.println(clock.dateFormat("U", dt));
 
  Serial.println();
 
  delay(1000);
}