Установка времени через Serial

Arctid
Offline
Зарегистрирован: 07.03.2016

Привет! Я новичок, пока как слепой котенок, столько вопросов, что не знаю уда смотреть. По сути:

Есть процедура, которая читает и устанавливает время из serial:

void ustanovka_vremeni(){
  //  time.settime(сек,мин,час,д,м,г,дн)
  //  time.settime(21,10,21,12,03,16,7)
  if (Serial.available() > 0) {  //если есть доступные данные
        // считываем введенное значение
        int sekund     = Serial.parseInt();
        int minut      = Serial.parseInt();
        int chasov     = Serial.parseInt();
        int den        = Serial.parseInt();
        int mes        = Serial.parseInt();
        int god        = Serial.parseInt();
        int den_nedel  = Serial.parseInt();

        //выводим в порт
        Serial.println(sekund);
        Serial.println(minut);
        Serial.println(chasov);
        Serial.println(den);
        Serial.println(mes);
        Serial.println(god);
        Serial.println(den_nedel);
        //установка времени
        time.settime( 
          sekund,
          minut,
          chasov,
          den,
          mes,
          god,
          den_nedel);
       Serial.print("ustanovleno vremya: ");
       Serial.println(time.gettime("d-m-Y, H:i:s, D"));
    }
}

Консолька выводит вполне себе значения, а время устанавливается ошибочное:

55
15
11
7
3
16
1
ustanovleno vremya: 45-25-20@5, 45:85:85, Jan

Подозреваю, что это из - за незнания С. Прошу разложить по запчастям, заранее благодарю!

 

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

Arctid пишет:

Привет!

Привет! Для начала покажите объявление "time".

Arctid
Offline
Зарегистрирован: 07.03.2016

Думал это не нужно, но вот:

#include <RTC.h>
RTC    time;
time.begin(RTC_DS1302);

 

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

Я конечно не уверен какую именно  Вы используете бибилиотеку RTC, но попробуйте инициализацию такого типа:

//    time.begin(RTC_DS1302,10,13,12);    // на базе чипа DS1302, вывод RST, вывод CLK, вывод DATдоступны любые выводы
Arctid
Offline
Зарегистрирован: 07.03.2016

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

time.settime(
    0,// секунды
    4,// минуты
    18, //часы
    07, //число
    3,//месяц
    16, //год
    1); //день недели

Подозреваю, что дело в разименовывании указателя на переменные int. Может возвращаться адрес указателя , а не значение переменной.

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

Для начала, я бы попробовал устанавливать только секунды (остальные параметры можете передавать -1 или вообще не передавать). И контролировать установленное время до  и после корректировки.

Arctid
Offline
Зарегистрирован: 07.03.2016

Благодарю! Попробую.

Arctid
Offline
Зарегистрирован: 07.03.2016

Дело было не в бобине =). Переключал ардуинки у которых разные чесы были, просто забыл снять нужный комментарий:

//time.begin(RTC_DS3231);
  time.begin(RTC_DS1307);

Еще раз благодарю!

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Arctid пишет:

Подозреваю, что дело в разименовывании указателя на переменные int. Может возвращаться адрес указателя , а не значение переменной.

А теперь покажите, плз, в приведённом вами куске кода,  где там указатели и, тем более, разыменование оных? Уж морозить чушь - так по полной.

 

Arctid
Offline
Зарегистрирован: 07.03.2016

Компилятор транслирует диалект "ардуино" в чистый СИ. Это значит, что там происходит - не видно. Ну а в целом для тех кто подвержен мигать красной лампочкой эмоций в самом начале я написал, что являюсь новичком.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Arctid пишет:

Компилятор транслирует диалект "ардуино" в чистый СИ. Это значит, что там происходит - не видно. Ну а в целом для тех кто подвержен мигать красной лампочкой эмоций в самом начале я написал, что являюсь новичком.

Нет никакого диалекта ардуино в природе - это просто самоназвание, не более того. Тот язык, на котором вы пишете в среде Arduino - называется C++, а С - является подмножеством языка C++, к слову.

Так что компилятор ничего в Си не транслирует - потому как исходный код и так на нём. Компилятор транслирует в машинные коды, к слову.

А то, что вы сослались якобы на разыменование указателя - это к делу не относится, т.к. в приведённом куске кода не было работы с указателями вообще.

char buff[] = "Hello";

char* ptr = buff;; // ptr - указатель

*ptr = 'D'; // разыменование указателя и запись по адресу памяти, теперь в массиве buff первая буква - D

ptr++; // инкремент указателя

*ptr = 'o'; 

Serial.println(buff);

Разницу чувствуете?

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

Arctid пишет:

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

...

Подозреваю, что дело в разименовывании указателя на переменные int. Может возвращаться адрес указателя , а не значение переменной.

«Они хочут свою образованность показать и всегда говорят о непонятном».

(А.П. Чехов)

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

Что за развлечение грызть новичков?

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

T.Rook пишет:

Что за развлечение грызть новичков?

Так дело ж "в разименовывании указателя"! А у указателя нечёткая типизация в силу изначального параметрического полиморфизма. Вот и трудно ловить секунды времени компиляции.

"Жизнь такова, какова она есть, и больше никакова" (В. Костров)

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

T.Rook пишет:

Что за развлечение грызть новичков?

Это такая местная забава, привыкайте.

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

DIYMan пишет:

Это такая местная забава, привыкайте.

Та да. Но ведь охоту у них отбиваем. Хотя конечно можно прикрыться "кто хочет, тот выдержит и найдет", но....

Ладно. Тема то давно закрыта. ТС разобрался и у него заработало.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

T.Rook пишет:

Ладно. Тема то давно закрыта. ТС разобрался и у него заработало.

Думаете? ;) До очередного глупого косяка. Конечно, они (косяки) - случаются у всех, многие их даже курят, но я не об этом. Я о том, что когда человек даже не пытается чего-то осознать - это совсем-совсем беда. Смотрите, сколько на форуме вопросов "ПАААЧИМУ не компилируется?" - а делов-то: заголовочный файл от библиотеки подключить.

Вот вы хотели бы жить в домике, построенном такими ниф-нифами?