Сравнение даты и времени настоящего с датой из памяти.

Здесь обсуждаем Arduino
Аватара пользователя
gurvinok
Сообщения: 1505
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Сравнение даты и времени настоящего с датой из памяти.

Сообщение gurvinok » 09 фев 2016, 13:44

Интересно посмотреть на код расчета пройденных дней с 28 февраля високосного года на март через 29 феараля. По моему проще загибать пальцы пройденых дней, а следующий месяц определять первым числом. По поводу строк. Все строки в си это массив, то есть в строку загнали месц, год, секунды и каждый раз их нужно проверять в отдельном цикле. А оно надо?
Если долго мучиться, может быть получится.

Аватара пользователя
GhostX
Сообщения: 1115
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Сравнение даты и времени настоящего с датой из памяти.

Сообщение GhostX » 09 фев 2016, 14:16

Строки. У меня с этого вопрос начинался. Как лучше с точки зрения рациональности и почему...
По поводу календаря. Что станет с счетчиком если выключить контроллер? Это тогда каждое изменение в память записывать? И что будет 29 февраля? Я не знаю. Я так даже вопрос не ставил.))

Аватара пользователя
gurvinok
Сообщения: 1505
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Сравнение даты и времени настоящего с датой из памяти.

Сообщение gurvinok » 09 фев 2016, 14:56

А что строки. Строка это массив. Берется цикл и переберается весь массив.
Если долго мучиться, может быть получится.

Аватара пользователя
GhostX
Сообщения: 1115
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Сравнение даты и времени настоящего с датой из памяти.

Сообщение GhostX » 09 фев 2016, 16:32

сидел на код смотрел, и вопрос возник вот в этом месте.

Код: Выделить всё

// Если число больше предыдущего значит прошел день. Или если число равно 1 значит новый месяц
if((data[0] > day_old) | (data[0] == 1))
{
    // Увеличили счет дней на 1
    count_day++;
    // Записали текущее число
    day_old = data[0];
}
Тоесть, если наступает первое число, цикл завершится на 17 круге, если запустили в последний день предыдущего месяца? ну или меньшем если ранее было запущено.
или я что то не понимаю?

Аватара пользователя
gurvinok
Сообщения: 1505
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Сравнение даты и времени настоящего с датой из памяти.

Сообщение gurvinok » 09 фев 2016, 18:14

Дело в том что число не может идти в минус. Дата всегда начинается с первого числа и до последнего дня месяца, а имннно 28, 29, 30 или 31. Для того чтобы не заниматься вычислениями последнего дня месяца, можно просто проверять на первое число, а до первого дата будет всегда увеличиватся, то есть следующий день всегда будет больше чем предыдущий. По этому основной цикл нужно крутить пока не сбросятся все флаги. А флаги сбоасываются по временной прогамме. По совпадению количества дней и совпадению времени.
Если долго мучиться, может быть получится.

Аватара пользователя
GhostX
Сообщения: 1115
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Сравнение даты и времени настоящего с датой из памяти.

Сообщение GhostX » 09 фев 2016, 20:46

Я же не просто так код вставил. Там условие или день больше или просто первое чилсо.
Тоесть при переходе на первое число удовлетворяются оба условия.
Обнуляется старый день, а первое число так и остается первым. В итоге на следующим кругу цикла одно условие перестает удовлетворять if, а вот второе по прежнему 1 число и мы снова заходим в if и плюсуем счетчик, а так как старый день уже обнавлен, он его обновит, но от этого действия ничего не изменится...
На следующим кругу цикла мы снова зайдем в if, так как первое число так и осталось первым. И так мы насчитаем счетчик до 17 и выключим выполнение программы 1 числа любого месяца.
Старался описать максимум попростому. Если понимания ошибки не придет, рекомендую написать считалочку, которая будет делать тоже самое, но в секундах, ошибка сама себя выявит. На первой секунде каждой последующей минуты.

Аватара пользователя
gurvinok
Сообщения: 1505
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Сравнение даты и времени настоящего с датой из памяти.

Сообщение gurvinok » 09 фев 2016, 21:54

Это называется невнимательность.
if((data[0] > day_old) | (data[0] == 1))
Условие выполнится если data[0](текущее число) > day_old больше вчерашнего, например сегодня 31, а вчера было 30 ИЛИ если сегодня первое data[0] == 1. То есть условие выполнится при левой или правой части.
Если долго мучиться, может быть получится.

Аватара пользователя
GhostX
Сообщения: 1115
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Сравнение даты и времени настоящего с датой из памяти.

Сообщение GhostX » 09 фев 2016, 22:01

Теперь вопрос. Чья?
Сегодня первое число, что делает программа?
Заходит в if или не заходит?
Если заходит, то что помешает ей зайти в if через 5 минут?

Аватара пользователя
gurvinok
Сообщения: 1505
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Сравнение даты и времени настоящего с датой из памяти.

Сообщение gurvinok » 09 фев 2016, 23:14

Надо подумать
Если долго мучиться, может быть получится.

Ответить