Easyelectronics.ru

Электроника для всех
Текущее время: 18 янв 2021, 00:01

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 18 ] 
Автор Сообщение
 Заголовок сообщения: Диапазон времени для будильника
СообщениеДобавлено: 05 ноя 2016, 15:05 
Только пришел

Зарегистрирован: 05 ноя 2016, 15:01
Сообщения: 14
Откуда: Симферополь
Добрый день, требуется например с 23:30 до 7:45 утра исполнять какое-либо действие, в остальное время другое. Т.е. время начала исполнения всегда больше времени окончания. Уперся в то что после 23 часов идёт 0 часов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Диапазон времени для будильника
СообщениеДобавлено: 05 ноя 2016, 15:52 
Старожил
Аватара пользователя

Зарегистрирован: 27 мар 2015, 04:10
Сообщения: 1931
Откуда: Харьков
Код:
if (hours >= 23 || hours < 7) {
// do something
} else {
}

в чем проблема?
Демка: https://jsfiddle.net/xy0d06Lv/3/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Диапазон времени для будильника
СообщениеДобавлено: 05 ноя 2016, 16:19 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2897
Откуда: Санкт-Петербург
Например, запишите диапазон как "с 23:30 в течение 8:15" - и проблема пропадёт.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Диапазон времени для будильника
СообщениеДобавлено: 05 ноя 2016, 16:36 
Только пришел

Зарегистрирован: 05 ноя 2016, 15:01
Сообщения: 14
Откуда: Симферополь
aamonster писал(а):
Например, запишите диапазон как "с 23:30 в течение 8:15" - и проблема пропадёт.

Если можно, более детально напишите как это сделать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Диапазон времени для будильника
СообщениеДобавлено: 05 ноя 2016, 16:36 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 7228
Добавляйте к "времени" еще и "дату". А лучше - переводите требуемое время в "тиковый" формат, без разделения на час-минута-день.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Диапазон времени для будильника
СообщениеДобавлено: 05 ноя 2016, 16:54 
Только пришел

Зарегистрирован: 05 ноя 2016, 15:01
Сообщения: 14
Откуда: Симферополь
u37 писал(а):
Добавляйте к "времени" еще и "дату". А лучше - переводите требуемое время в "тиковый" формат, без разделения на час-минута-день.

Интересный вариант, попробую :) А так всё почти решилось обычными if else, когда время начала меньше времени окончания, вообще нет проблем. Уперся вот с обратным вариантом, получается нормально проверять до 0 часов или после.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Диапазон времени для будильника
СообщениеДобавлено: 05 ноя 2016, 16:59 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2897
Откуда: Санкт-Петербург
Buddha Zen, в каком формате вы храните время? Удобнее, как написал u37, хранить его в виде одного числа (правда, если у вас интервалы времени каждый день одни и те же - то без даты, просто количество тиков или секунд с полуночи).

Но независимо от формата - общий алгоритм таков:
Допустим, у вас время начала интервала - t0, конца интервала - t1, текущее время - t. (если t представляется как (ч,м,с) - то понадобится сделать функции сложения-вычитания для такого формата (с переносами из секунд в минуты и из минут в часы), если в тиках - обычное сложение-вычитание)
1. Перевод интервала в удобный вид:
len = t1 - t0;
if (len<0) len = len + 24ч; // если конечное время "меньше" начального - интервал просто переходит на следующие сутки
2. Проверка времени:
dt = t - t0; // время от начала интервала
if (dt<0) dt = dt + 24ч; // если мы были до начала интервала - сдвиг на сутки
if (dt<len) МЫ_В_ИНТЕРВАЛЕ!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Диапазон времени для будильника
СообщениеДобавлено: 05 ноя 2016, 17:05 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 7228
У if-else есть один маленький пустячок - как быть с большими интервалами? Если есть интервал в 4 часа, то почему бы не появиться на 12 часов? ... или 33?
Не делайте костыли там, где можно решить нормально - вылезет боком.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Диапазон времени для будильника
СообщениеДобавлено: 05 ноя 2016, 17:09 
Только пришел

Зарегистрирован: 05 ноя 2016, 15:01
Сообщения: 14
Откуда: Симферополь
aamonster писал(а):
Buddha Zen, в каком формате вы храните время? Удобнее, как написал u37, хранить его в виде одного числа (правда, если у вас интервалы времени каждый день одни и те же - то без даты, просто количество тиков или секунд с полуночи).

Формат времени двоично-десятичный (RTC stm32f103, библиотека HAL), диапазон постоянный каждые сутки, т.е. например с 23 до 7, flag=1 , а в остальное время flag=0. Я в сравнении часы умножаю на 100 и прибавляю минуты, получая целое число в котором часы получаются в приоритете) Сейчас опробую ваш вариант.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Диапазон времени для будильника
СообщениеДобавлено: 05 ноя 2016, 17:18 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2897
Откуда: Санкт-Петербург
u37, при этом остаётся тот же if-else, только время-дата представляется в "более длинном" формате (и, возможно, вылезает какой-нибудь mod)
if-else связан не с длиной интервала, а с периодичностью времени (что если мы указали 23:30 - то это 23:30 раз в 24 часа). Ну и, очевидно, интервала на 33 часа с представлением в виде времени начала и времени конца (без указания дат, дней недели или ещё какого признака) быть не может.


Buddha Zen, чтоб не запутаться - правда переводите время в секунды. Не уверен, что вы не допустите ошибку в реализации вычитания времени в таком формате, так что лучше пойти надёжным путём =)

Ну или ещё вариант -
if(t1>t0) result = (t>=t0 && t<t1)
else result = (t>=t0 || t<t1)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Диапазон времени для будильника
СообщениеДобавлено: 05 ноя 2016, 17:23 
Только пришел

Зарегистрирован: 05 ноя 2016, 15:01
Сообщения: 14
Откуда: Симферополь
aamonster писал(а):
Buddha Zen, чтоб не запутаться - правда переводите время в секунды. Не уверен, что вы не допустите ошибку в реализации вычитания времени в таком формате, так что лучше пойти надёжным путём =)

Спасибо, буду разбираться :) Я кстати так и делал изначально 2 варианта проверки - время начала больше или меньше времени окончания.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Диапазон времени для будильника
СообщениеДобавлено: 05 ноя 2016, 17:47 
Старожил
Аватара пользователя

Зарегистрирован: 14 апр 2014, 11:06
Сообщения: 1659
Откуда: Курск
Как вариант UNIX-time


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Диапазон времени для будильника
СообщениеДобавлено: 05 ноя 2016, 17:58 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2897
Откуда: Санкт-Петербург
Ага, тем паче судя по https://stm32f4-discovery.net/2014/07/l ... x-devices/ stm-овские либы его сразу отдают...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Диапазон времени для будильника
СообщениеДобавлено: 07 ноя 2016, 14:18 
Старожил

Зарегистрирован: 16 авг 2012, 23:27
Сообщения: 2101
Откуда: Москва
У меня есть суточный таймер промышленного изготовления и алгоритм его работы проверяет не диапазон а события, т.е. например настраиваем что в 23:30 включает нагрузку, а в 7:45 выключает, всё что происходит до и после этих событий его не волнует и можно например включать и выключать нагрузку кнопкой. Или вообще поставить только одно событие например на выключение в 18:00 и тогда каждый день в 18:00 чтото будет выключаться если оно было включено вручную не важно когда.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Диапазон времени для будильника
СообщениеДобавлено: 07 ноя 2016, 17:41 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 7228
mChel, если в 23:31 было отключение электричества, то нагрузка включена не будет. Т.е. по любому надо делать проверку на _диапазон_. Если не по наступлению события, то по проверке. Обработка только "событий" - дорога в ад. ))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Диапазон времени для будильника
СообщениеДобавлено: 07 ноя 2016, 18:24 
Старожил

Зарегистрирован: 16 авг 2012, 23:27
Сообщения: 2101
Откуда: Москва
Ну так производители сего девайса не дураки, они туда резервный аккумулятор поставили, посему обработка событий происходит независимо от наличия электричества, только реле не щёлкает т.к. запитано от сети. Но если вручную переставить время и оно перескочит через событие то оно таки да, не сработает, впрочем об этом написано в инструкции и каких либо неудобств не создаёт.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Диапазон времени для будильника
СообщениеДобавлено: 07 ноя 2016, 18:33 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 7228
Ну да. Давайте сделаем баг, тщательно его опишем и объявим фичей. Главное, чтоб не исправлять.
#рукалицо
Вот за это я не люблю китацко-америкосскую продукцию. Сие называется "шаблонное мышление", и для порядочного разработчика означает смерть.
Ладно, /off


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Диапазон времени для будильника
СообщениеДобавлено: 07 ноя 2016, 23:51 
Только пришел

Зарегистрирован: 05 ноя 2016, 15:01
Сообщения: 14
Откуда: Симферополь
u37 писал(а):
mChel, если в 23:31 было отключение электричества, то нагрузка включена не будет. Т.е. по любому надо делать проверку на _диапазон_. Если не по наступлению события, то по проверке. Обработка только "событий" - дорога в ад. ))

Конечно проверка нужна, ибо если питание устройства включено в диапазоне (или установлено время), процессор должен исполнять возложенную на сей момент задачу. Без проверки грош ему цена.
P.S. Победил задачу, всё оказалось просто - пошел от обратного - проверяю диапазон обратный от нужного, а он всегда в пределах от 0 до 23 часов) Благодарю всех за участие :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB