Технический форум по робототехнике.
paradox860 » 15 июн 2011, 17:37
Здравствуте ВСЕ!Собираю на Дуине аква комьютер.Столкнулся с такой проблемой - нужно в определенное время включать нагрузку и в определенное выключать(допустим свет в аквариуме включить в 9:00 а выключить в 21:00).К ардуине подключенны часы на DS1307 и дисплей.
Вопрос такой как выполнить сравнение времени на которое установлен таймер и времени на данный момент?
Angel71 » 15 июн 2011, 18:02
время2-время1=разница
с утра так было
=DeaD= » 15 июн 2011, 19:02
Если время включает полную дату - тогда так
иначе при переходе через сутки будет полная фигня
Scorpio » 15 июн 2011, 19:43
Там все в отдельных регистрах. Сравнить сначала десятки часов, если совпадают то единицы часов, десятки минут и единицы минут. Только они там в двоично - десятичном коде. Так что прийдется переводить, если задание срабатывания будет в дркгом.
Angel71 » 15 июн 2011, 20:35
за квант времени берём, допустим секунды и храним в секундах. за 0 принимаем 0ч 0мин 0сек 1января такого-то года.
как хотите отнимайте, складывайте, из секунд получайте часы, минуты, дни, недели. и всё, никакой путаницы. если нормально хранить и учитывать базовый год и что в данный момент представляет из себя это кол-во секунд (дата-время или интервал времени), то проблем почти не будет.
чтоб вообще не было, нужно учитывать ещё високосные года, но эт не сложно.
HarryStar » 15 июн 2011, 21:08
Если нужна разница то да - лучше 1 раз написать функцию перевода времени в секунды и обратно и вычислять разницу в секундах.
Но ТС не нужно измерять разницу во времени. Ему нужно просто сделать что-то типа будильника. Сделать список событий и функцию добавления события в будильник в формате "событие, время", например
budilnik(LIGHT_ON, "21:00");
budilnik(LIGHT_OFF, "07:00");
и все. А МК будет пару раз в минуту проверять не наступило ли данное время, сравнивая указанное значение с тем, что будет прочитано из часов.
PS: Завтра как раз заберу заказик, где такие же часы с I2C, буду тоже их мучить.
paradox860 » 15 июн 2011, 21:15
Scorpio писал(а):Там все в отдельных регистрах. Сравнить сначала десятки часов, если совпадают то единицы часов, десятки минут и единицы минут. Только они там в двоично - десятичном коде. Так что прийдется переводить, если задание срабатывания будет в дркгом.
Я так и делал, просто уж больно громоздко получается много ифов.У меня время уже переведенное хранится в массиве - часы минуты секунды отдельно.Я думал можно как то проще сделать.
=DeaD= » 15 июн 2011, 21:19
Сделать отдельно функцию возращающую по отдельным компонентам даты и времени одно число - время в секундах с какой-то даты.
paradox860 » 15 июн 2011, 21:23
HarryStar писал(а):Если нужна разница то да - лучше 1 раз написать функцию перевода времени в секунды и обратно и вычислять разницу в секундах.
Но ТС не нужно измерять разницу во времени. Ему нужно просто сделать что-то типа будильника. Сделать список событий и функцию добавления события в будильник в формате "событие, время", например
budilnik(LIGHT_ON, "21:00");
budilnik(LIGHT_OFF, "07:00");
и все. А МК будет пару раз в минуту проверять не наступило ли данное время, сравнивая указанное значение с тем, что будет прочитано из часов.
PS: Завтра как раз заберу заказик, где такие же часы с I2C, буду тоже их мучить.
Разница не нужна. Тут впринципе нужно вот такое условие которое нужно проверять раз в секунду if 9:00<x<21:00 только как это проще реализовать?
Добавлено спустя 1 минуту 48 секунд:=DeaD= писал(а):Сделать отдельно функцию возращающую по отдельным компонентам даты и времени одно число - время в секундах с какой-то даты.
Да наверное завтра так и попробую.
dccharacter » 15 июн 2011, 21:23
Можно создать две переменные типа структура и сравнивать их.
=DeaD= » 15 июн 2011, 21:24
dccharacter писал(а):Можно создать две переменные типа структура и сравнивать их.
Можно по какой-то причине пропустить момент совпадения и тогда всё, пиши пропало
HarryStar » 15 июн 2011, 21:27
Вам не надо сравнивать больше или меньше. Вам нужно просто равенство. Это гораздо проще, тут надо сравнивать только часы и минуты и все. 2 IFа (и 1-2 строки конвертации из 16-10 формата). Наступило событие - выполняем его и выкидываем из очереди событий. Все. Никаких больше меньше.
Пропустить невозможно, т.к. проверка идет несколько раз в минуту.
Angel71 » 15 июн 2011, 21:32
2HarryStar, это общепринятый подход. всё остальное упрощение, оптимизация или просто изврат.
в случае с аквакомпьютером это имхо изврат.
П.С. в смысле изврат вообще. всё начнается вот с таких простеньких проблем, когда нужно писать "велосипед". заканчивается тем, что в общем такой аквакомпьютер выйдет "слегка"
примитивный простенький, а делать его будут сипец как долго. +есть проекты аквакомпьютеров (на соответствующих форумах) - можно скачать схему, прошивку и просто начать использовать. а заново велосипед изобретать, причём не дотягивающий или такого же уровня смысла мало.
Последний раз редактировалось
Angel71 15 июн 2011, 21:49, всего редактировалось 1 раз.
paradox860 » 15 июн 2011, 21:46
Angel71 писал(а):2HarryStar, это общепринятый подход. всё остальное упрощение, оптимизация или просто изврат.
в случае с аквакомпьютером это имхо изврат.
П.С. в смысле изврат вообще. всё начнается вот с таких простеньких проблем, когда нужно писать "велосипед". заканчивается тем, что в общем такой аквакомпьютер выйдет "слегка"
примитивный простенький, а делать его будут сипец как долго.
Да я уже и так нагородил.Хотел сначала просто таймер включения выключения сделать.А получилось несколько таймеров для включения 4 нагрузок в разное время,Термостабилизатор с подключенным охдадителем и нагревателем, и ко всему этому прикрутил дисплей с неким подобием меню.А да и еще все необходимые значения сохраняются в ПЗУ.
Angel71 » 15 июн 2011, 21:56
ээээээээ, а чего только с таймеров?
вы инет до этого на тему аквакомпьютеров вообще шерстили? на всевозможных аквафорумах проекты неоднократно попадались и таки весьма функциональные железки в итоге получались у людей.
но имхо всё-равно простенькие.
как по мне намного функциональней и не сильно дороже подобная автоматика получается на платах, начиная с уровня mini2440. нормальный экран (в сравнении с символьным), тач, много памяти, возможность писать код в среде с более богатыми готовыми библиотеками + еще много всяких плюшек.