помогите создать библиотеку

bee73
Offline
Зарегистрирован: 27.10.2019

нашел файл time.h

struct tm {
        int8_t          tm_sec; /**< seconds after the minute - [ 0 to 59 ] */
        int8_t          tm_min; /**< minutes after the hour - [ 0 to 59 ] */
        int8_t          tm_hour; /**< hours since midnight - [ 0 to 23 ] */
        int8_t          tm_mday; /**< day of the month - [ 1 to 31 ] */
        int8_t          tm_wday; /**< days since Sunday - [ 0 to 6 ] */
        int8_t          tm_mon; /**< months since January - [ 0 to 11 ] */
        int16_t         tm_year; /**< years since 1900 */
        int16_t         tm_yday; /**< days since January 1 - [ 0 to 365 ] */
        int16_t         tm_isdst; /**< Daylight Saving Time flag */
    };

добавил #include <time.h>

заменил на Serial.println(tm_mday);

все равно пишет не задикларирована tm_mday

sadman41
Offline
Зарегистрирован: 19.10.2016

Это ужасно. Напоминает мне фильм "Идиократия".

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

А ругань можете привести? Полностью?

bee73
Offline
Зарегистрирован: 27.10.2019
F:\Arduino\тестирование\ServerDateTime\ServerDateTime.ino: In function 'void setup()':
 
ServerDateTime:33:26: error: 'tm_wday' was not declared in this scope
 
exit status 1
'tm_wday' was not declared in this scope
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

bee73 пишет:

добавил #include <time.h>

заменил на Serial.println(tm_mday);

все равно пишет не задикларирована tm_mday

Скажите, Вы совсем не понимаете что написано в программе? Ни буквы?

У Вас что в строке №29 написано?

struct tm *localtime(const time_t *_timer);

Ну так, блин и пишите Serial.println(localtime.tm_mday);

Только, знаете, лучше бы Вы всё-таки немного изучили язык. Скоро Вас начнут просто посылать с такими вопросами, а их (вопросов) не уменьшится, т.к. Вам нужна подсказка по каждой запятой.

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

Стоп! Вы в показаниях путаетесь! Что там у Вас tm_mday или tm_wday? надеюсь, Вы понимаете. что это разные вещи?

bee73
Offline
Зарегистрирован: 27.10.2019

спасибо, 

но в недрах инета  указано что функция struct tm *localtime(const time_t *ptm);сохраняет его в структуре tm и возвращает указатель на нее, я и незнал что нужно повторно использывать туже функцию localtime
Serial.println(localtime.tm_wday); и все равно 

F:\Arduino\тестирование\ServerDateTime\ServerDateTime.ino: In function 'void setup()':
 
ServerDateTime:33:28: error: request for member 'tm_wday' in 'localtime', which is of non-class type 'tm*(const time_t*) {aka tm*(const long int*)}'
 
exit status 1
request for member 'tm_wday' in 'localtime', which is of non-class type 'tm*(const time_t*) {aka tm*(const long int*)}'
 
b707
Offline
Зарегистрирован: 26.05.2017

а так

Serial.println(localtime->tm_wday);

bee73
Offline
Зарегистрирован: 27.10.2019
delay(250);
  Serial.println(timeClient.getFormattedTime());
  Serial.println(timeClient.getEpochTime());
  time_t(timeClient.getEpochTime());
  struct tm *localtime(const time_t *_timer);
 Serial.println(localtime->tm_wday);
F:\Arduino\тестирование\ServerDateTime\ServerDateTime.ino: In function 'void setup()':
 
ServerDateTime:31:28: error: request for member 'tm_wday' in 'localtime', which is of non-class type 'tm*(const time_t*) {aka tm*(const long int*)}'
 
exit status 1
request for member 'tm_wday' in 'localtime', which is of non-class type 'tm*(const time_t*) {aka tm*(const long int*)}'
b707
Offline
Зарегистрирован: 26.05.2017

bee73 пишет:

но в недрах инета  указано что функция struct tm *localtime(const time_t *ptm);сохраняет его в структуре tm и возвращает указатель на нее, я и незнал что нужно повторно использывать туже функцию localtime

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

Вот это вот:

struct tm *localtime(const time_t *ptm);

никакая не функция! Это обьявление указателя localtime, указывающего на структуру типа tm

Почему бы для начала не пойти и не прочитать, что такое структуры, что такое поле структуры и как с ним работать?

Тогда и идиотских вопросов не будет

 

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

Вот и я про тоже. Вам одну строчку подсказали, Вы её написали, но это не помогло, потому, что у Вас ошибка в соседней (предыдущей) структура описана неправильно. И так будет бесконечно пока Вы не изучите язык.

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

bee73 пишет:
указано что функция struct tm *localtime(const time_t *ptm);

И что с того? А где указано, что её прямо так в виде объявления нужно в программу пихать?

bee73
Offline
Зарегистрирован: 27.10.2019

b707 пишет:

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

Уважаемый...... ме можите помочь ок, но оскорблять это ..... вы тему головную видите "Песочница. Раздел для новичков" или по вашему новичок чел с 10 опытом кодировки ардуино или с++...

я прочел про структуры но реального примера похожего на мою ситуацию не нашел, прочел и про time.h.

b707
Offline
Зарегистрирован: 26.05.2017

не надо врать, ничего вы не читали

Вот, держите, у меня компилируется. Если у вас снова нет - ищите ошибку в своей голове

  Serial.println(timeClient.getFormattedTime());
  Serial.println(timeClient.getEpochTime());
  time_t now = timeClient.getEpochTime();
  struct tm *tt = localtime( &now );
  Serial.println(tt->tm_wday);

 

b707
Offline
Зарегистрирован: 26.05.2017

вуд

bee73
Offline
Зарегистрирован: 27.10.2019

b707 пишет:

не надо врать, ничего вы не читали

Вам конечно виднее:

http://www.codenet.ru/progr/cpp/sprd/localtime.php

https://ejudge.ru/study/3sem/time.pdf

https://prog-cpp.ru/c-time-date/

http://cppstudio.com/post/616/

https://alexgyver.ru/lessons/arduino-reference/

и др 

b707
Offline
Зарегистрирован: 26.05.2017

bee73 пишет:

Вам конечно виднее:

ну тогда даж не знаю, что сказать :)))

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

А все потому, что вы основ не знаете - вам даже примеры не помогают, потому что вы их не понимаете.

 

Update - справедливости ради надо отметить, что там выше, где я писал "localtime() - не функция" - фигню сморозил, таки функция. Но мне простительно, я ответ на ваш вопрос нашел в гугле за минуту.

bee73
Offline
Зарегистрирован: 27.10.2019

и еще, если для вас очивидно 

time_t now = timeClient.getEpochTime();
struct tm *tt = localtime( &now );
или
time_t(timeClient.getEpochTime());
struct tm *localtime(const time_t *_timer)
 
то для меня пока нет

 

bee73
Offline
Зарегистрирован: 27.10.2019

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

b707
Offline
Зарегистрирован: 26.05.2017

bee73 пишет:

и еще, если для вас очивидно

ну так что, мой код заработал или как?

bee73
Offline
Зарегистрирован: 27.10.2019

и мне важно для себя понять почему мой код не сработал а ваш компилиться, это нигде не прочитаешь тут только опыт...

у меня в одном файле time.h так:

01 struct tm {
02         int8_t          tm_sec; /**< seconds after the minute - [ 0 to 59 ] */
03         int8_t          tm_min; /**< minutes after the hour - [ 0 to 59 ] */
04         int8_t          tm_hour; /**< hours since midnight - [ 0 to 23 ] */
05         int8_t          tm_mday; /**< day of the month - [ 1 to 31 ] */
06         int8_t          tm_wday; /**< days since Sunday - [ 0 to 6 ] */
07         int8_t          tm_mon; /**< months since January - [ 0 to 11 ] */
08         int16_t         tm_year; /**< years since 1900 */
09         int16_t         tm_yday; /**< days since January 1 - [ 0 to 365 ] */
10         int16_t         tm_isdst; /**< Daylight Saving Time flag */
11

    };

в другом ссылка на #include "TimeLib.h" в котором:

typedef struct  { 
  uint8_t Second; 
  uint8_t Minute; 
  uint8_t Hour; 
  uint8_t Wday;   // day of week, sunday is day 1
  uint8_t Day;
  uint8_t Month; 
  uint8_t Year;   // offset from 1970; 
} 	tmElements_t, TimeElements, *tmElementsPtr_t;

и для меня это пока темный лес

 

bee73
Offline
Зарегистрирован: 27.10.2019

вот так получилось :)

30.9.119 хотя должно было 30.10.2019

bee73
Offline
Зарегистрирован: 27.10.2019
Serial.print(tt->tm_mday);
Serial.print(".");
Serial.print(tt->tm_mon);
Serial.print(".");
Serial.print(tt->tm_year);

 

bee73
Offline
Зарегистрирован: 27.10.2019

а время правильно

Serial.print(tt->tm_hour);
Serial.print(":");
Serial.print(tt->tm_min);
1572473968
30.9.119
22:19

 

b707
Offline
Зарегистрирован: 26.05.2017

bee73 пишет:

а время правильно

Serial.print(tt->tm_hour);
Serial.print(":");
Serial.print(tt->tm_min);
1572473968
30.9.119
22:19

 

где-то у тебя ошибки - 1572473968 - это 49 лет и почти 10 месяцев, так что дата должна быть правильной

Алексей.
Алексей. аватар
Offline
Зарегистрирован: 02.02.2018

bee73 пишет:

Serial.print(tt->tm_mday);
Serial.print(".");
Serial.print(tt->tm_mon);
Serial.print(".");
Serial.print(tt->tm_year);

 

Многие, я думаю, могли-бы вам этот код привести сразу, только это не совсем правильно.
Проверяя домашнее задание ребенку, пришел к такому выводу:
Исправляешь сам ошибки "тут нетак, правильно вот так" - занятие бесполезное, на этом к сожалению не учатся.
Кода говоришь "вот в этом задании ошибка, ищи где" - путь более сложный и более эффективный, но приходится жертвовать временем разбирая задания с ребенком.
 

b707
Offline
Зарегистрирован: 26.05.2017

а, кстати год, скорее всего, считается с 1900.

Так что правильный год, это

Serial.print(1900 + tt->tm_year);

а месяц с нуля - читай комментарии  в библиотеке:

int8_t          tm_mon; /**< months since January - [ 0 to 11 ] */
 int16_t         tm_year; /**< years since 1900 */

 

bee73
Offline
Зарегистрирован: 27.10.2019

запросил без параметров все рано:

NTPClient timeClient(ntpUDP);//,  "pool.ntp.org", timeOffset, utcOffsetInSeconds);
1572464241
30.9.119
19:37
bee73
Offline
Зарегистрирован: 27.10.2019

а месяц тогда с 1 Serial.print(1 + tt->tm_mon); :)

чудеса

bee73
Offline
Зарегистрирован: 27.10.2019
1572464627
30.10.2019
19:43
b707
Offline
Зарегистрирован: 26.05.2017

bee73 пишет:

а месяц тогда с 1 Serial.print(1 + tt->tm_mon); :)

чудеса

ну какие "чудеса" опять? смотрите комменты к структуре - вот и вашего же сообщения #51 копирую

struct tm {
        int8_t          tm_sec; /**< seconds after the minute - [ 0 to 59 ] */
        int8_t          tm_min; /**< minutes after the hour - [ 0 to 59 ] */
        int8_t          tm_hour; /**< hours since midnight - [ 0 to 23 ] */
        int8_t          tm_mday; /**< day of the month - [ 1 to 31 ] */
        int8_t          tm_wday; /**< days since Sunday - [ 0 to 6 ] */
        int8_t          tm_mon; /**< months since January - [ 0 to 11 ] */
        int16_t         tm_year; /**< years since 1900 */
        int16_t         tm_yday; /**< days since January 1 - [ 0 to 365 ] */
        int16_t         tm_isdst; /**< Daylight Saving Time flag */
    };

 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Я беру свои последние слова в этой теме обратно. Можно. Был не прав, признаю. 

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

bee73 пишет:

 хотя должно было 30.10.2019

Кому должно?

Вам уже раза три сказали "читайте комментарии" и даже показали где именно читать. Толку, что Вы приводите кучу линок, если Вы их не читаете (или не понимаете).

Номер месяца начинается с нуля. а не с 1. Потому, октябрь "должно быть" 9!