Помогите ГУРУ начинающему... DS3231 не пойму как записать в переменную числовой день недели

mihserg
Offline
Зарегистрирован: 21.04.2018

Сильно не пинайте, вообще новичок, но второй вечер сижу не могу записать в переменную weekDay текущий новер деня недели

Скетч такой:

#include <DS3231.h>           
DS3231 clock;                 
RTCDateTime DateTime;         
word weekDay;
 
void setup()
  Serial.begin(9600);
  clock.begin();                    
}
 
void loop()
  DateTime = clock.getDateTime();    
  weekDay =  clock.dateFormat("N",DateTime);    
  Serial.println(clock.dateFormat("N", DateTime));
  Serial.println(weekDay);
  delay(1000); 
  }
 
 
Смотрю в монитор портов результат
5
1945
т.е. строкой   Serial.println(clock.dateFormat("N", DateTime)); 
выдаёт 5
строкой   Serial.println(weekDay); 
выдаёт 1945
хотя переменной присваиваю тоже значение что и вывожу в порт
weekDay =  clock.dateFormat("N",DateTime);   
Если меняю тип у переменной weekDay на int  то выдаёт 1947
Если byte то выдаёт 153 (изначально его и ставил, т.к. значение должно быть т 1 до 7 правильно? или лучше др. тип использовать?).
Как мне записать текщий день недели в данный момент пятница т.е. нужно записать 5 в переменную weekDay, какой лучше использовать тип переменной учитывая то будет от 1 до 7
Пробовал вместо N использовать другие буквы из примера, но не дало результат
 
/*
Date formats (Day)
------------------
 
 * d : Day of the month, 2 digits with leading zeros (01 to 31)
 * D : A textual representation of a day, three letters (Mon through Sun)
 * j : Day of the month without leading zeros (1 to 31)
 * l : A full textual representation of the day of the week (Sunday through Saturday)
 * N : ISO-8601 numeric representation of the day of the week (1 for Monday through 7 for Sunday)
 * S : English ordinal suffix for the day of the month, 2 characters (st, nd, rd or th. Works well with j)
 * w : Numeric representation of the day of the week (0 for Sunday through 6 for Saturday)
 * z : The day of the year (0 through 365)
 
 

 

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

Всатавьте пожалуйста скетч по правилам форума. Та в окне написания сообщения кнопка есть.

mihserg
Offline
Зарегистрирован: 21.04.2018
#include <DS3231.h>           
DS3231 clock;                 
RTCDateTime DateTime;         
byte weekDay;

void setup()
{ 
  Serial.begin(9600);
  clock.begin();                    
}

void loop()
{ 
  DateTime = clock.getDateTime();    
  weekDay =  clock.dateFormat("N",DateTime);    
  Serial.println(clock.dateFormat("N", DateTime));
  Serial.println(weekDay);
  delay(1000); 
  }

 

mihserg
Offline
Зарегистрирован: 21.04.2018

Прошу прощения моё первое сообщение на этом форуме... новичок....

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

Вы бы еще сказали, где библиотеку брали. А то в гугле десяток с таким названием.

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

1. Функция dateFormat возвращает указатель на символьную строку и Ваша попытка запихасть строку в переменную тиап byte (строка №15) изначально не проходит. Она не число возвращает, у готовую строку для печати. Нужно число, так и берите его из Вашей переменной DateTime - Оно там уже готове сидит. Называется dayOfWeek.

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

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

sadman41 пишет:

Вы бы еще сказали, где библиотеку брали. А то в гугле десяток с таким названием.

Я знаю эту библиотеку. Это та, где автор ничтоже сумнящеся возвращает указатель на локальный объект, а потом "программисты" типа ТС (да и немного пограмотнее - тоже) в истерике бьются - "почему ни с того ни с сего заглючило - вчера работало" :)

mihserg
Offline
Зарегистрирован: 21.04.2018

С библиотекой да... чтоб в чёмто разобраться нужно посмотреть как это делают другие, поэтому смотрел видео, пробовал  с разных мест. Вроде скачаешь одну попробуешь как пример вставишь всё работает, но учитывая что опыта 0 не всё понимаешь в сктче в результате гдето четвертая по счёту библиотека под видео  https://www.youtube.com/watch?v=7yyGwjR64QU ссылка на яндекс диск библиотека https://yadi.sk/d/EPoJicxuvDVUd открыл посмотрел понравилась тем что там и часы и будильник и вроде как всё не сильно сложно и всё вроде как понятно. В результате часы будильник настроил всё работает, прикрутил датчик темературы, давление, экран 1602, прикрутил датчик качества воздуха MQ135 всё красиво, потом наткнулся на библиотеку LCD_1602_RUS решил день недели выводить на экран не по английски, эта библиотека выводит на английском без проблем, решил сделать типа

switch (weekDay) {
     case 1:
       strcpy(weekDayStr, "Понедельник");
         break;
      case 2:
         strcpy(weekDayStr, "Вторник"); 
и т.д. вот тут и впёрся второй вечер сижу не могу понять почему выводя на экран или в монитор порта одни значения, если присваиваю переменной, то в переменной другое значение. Я кончено подозреваю что там не число а структура, но может както можно вывести именно число?
mihserg
Offline
Зарегистрирован: 21.04.2018

ОК спасибо за инфу, посоветуйте библиотеку написанную "прямыми руками"... будем с ней разбираться

mihserg
Offline
Зарегистрирован: 21.04.2018

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

1. Функция dateFormat возвращает указатель на символьную строку и Ваша попытка запихасть строку в переменную тиап byte (строка №15) изначально не проходит. Она не число возвращает, у готовую строку для печати. Нужно число, так и берите его из Вашей переменной DateTime - Оно там уже готове сидит. Называется dayOfWeek.

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

Большое спасибо поставил  weekDay =  DateTime.dayOfWeek; 

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

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

К сожалению, не посоветую. Я пользую библиотеки только когда надо по-быстрому проверить новый модуль (работае-не работает, чтобы знать чего китайцу ставить в отзыве) и в примерах, которые иногда пишу здесь. В реальной жизни я их не использую почти никогда. Что мне надо - пишу сам. По большому счёту это неправильно, но это "по большому", а когда библиотеки писал ХЗ кто и доверие к ним соответствующее, то уж лучше потратить время, но знать, что все ляпы в программе - мои собственные. Оно ж "своё дерьмо не воняет", так ведь.

mihserg
Offline
Зарегистрирован: 21.04.2018

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

К сожалению, не посоветую. Я пользую библиотеки только когда надо по-быстрому проверить новый модуль (работае-не работает, чтобы знать чего китайцу ставить в отзыве) и в примерах, которые иногда пишу здесь. В реальной жизни я их не использую почти никогда. Что мне надо - пишу сам. По большому счёту это неправильно, но это "по большому", а когда библиотеки писал ХЗ кто и доверие к ним соответствующее, то уж лучше потратить время, но знать, что все ляпы в программе - мои собственные. Оно ж "своё дерьмо не воняет", так ведь.

Спасабо. Пока вроде работает будем двигаться дальше, как раз от китайцев пришёл  SIM900, герконовые датчики и пир датчик, будем дальше прикручивать к тому что есть, так постепенно разберусь с основами, дальше будем копать глубже, возможно когда нибудь и я буду писать свои библиотеки а не использовать чьито... А вам ешё рвз больше спасибо за помощь.

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

Я вот эту под себя дербанил:   https://github.com/Makuna/Rtc