roboforum.ru

Технический форум по робототехнике.

Таймер с часами реального времени.

Таймер с часами реального времени.

paradox860 » 15 июн 2011, 17:37

Здравствуте ВСЕ!Собираю на Дуине аква комьютер.Столкнулся с такой проблемой - нужно в определенное время включать нагрузку и в определенное выключать(допустим свет в аквариуме включить в 9:00 а выключить в 21:00).К ардуине подключенны часы на DS1307 и дисплей.
Вопрос такой как выполнить сравнение времени на которое установлен таймер и времени на данный момент?

Re: Таймер с часами реального времени.

Angel71 » 15 июн 2011, 18:02

время2-время1=разница :oops: :crazy: :) с утра так было

Re: Таймер с часами реального времени.

=DeaD= » 15 июн 2011, 19:02

Если время включает полную дату - тогда так :) иначе при переходе через сутки будет полная фигня :pardon:

Re: Таймер с часами реального времени.

Scorpio » 15 июн 2011, 19:43

Там все в отдельных регистрах. Сравнить сначала десятки часов, если совпадают то единицы часов, десятки минут и единицы минут. Только они там в двоично - десятичном коде. Так что прийдется переводить, если задание срабатывания будет в дркгом.

Re: Таймер с часами реального времени.

Angel71 » 15 июн 2011, 20:35

за квант времени берём, допустим секунды и храним в секундах. за 0 принимаем 0ч 0мин 0сек 1января такого-то года. :) как хотите отнимайте, складывайте, из секунд получайте часы, минуты, дни, недели. и всё, никакой путаницы. если нормально хранить и учитывать базовый год и что в данный момент представляет из себя это кол-во секунд (дата-время или интервал времени), то проблем почти не будет. :oops: чтоб вообще не было, нужно учитывать ещё високосные года, но эт не сложно.

Re: Таймер с часами реального времени.

HarryStar » 15 июн 2011, 21:08

Если нужна разница то да - лучше 1 раз написать функцию перевода времени в секунды и обратно и вычислять разницу в секундах.

Но ТС не нужно измерять разницу во времени. Ему нужно просто сделать что-то типа будильника. Сделать список событий и функцию добавления события в будильник в формате "событие, время", например
budilnik(LIGHT_ON, "21:00");
budilnik(LIGHT_OFF, "07:00");

и все. А МК будет пару раз в минуту проверять не наступило ли данное время, сравнивая указанное значение с тем, что будет прочитано из часов.
PS: Завтра как раз заберу заказик, где такие же часы с I2C, буду тоже их мучить.

Re: Таймер с часами реального времени.

paradox860 » 15 июн 2011, 21:15

Scorpio писал(а):Там все в отдельных регистрах. Сравнить сначала десятки часов, если совпадают то единицы часов, десятки минут и единицы минут. Только они там в двоично - десятичном коде. Так что прийдется переводить, если задание срабатывания будет в дркгом.

Я так и делал, просто уж больно громоздко получается много ифов.У меня время уже переведенное хранится в массиве - часы минуты секунды отдельно.Я думал можно как то проще сделать.

Re: Таймер с часами реального времени.

=DeaD= » 15 июн 2011, 21:19

Сделать отдельно функцию возращающую по отдельным компонентам даты и времени одно число - время в секундах с какой-то даты.

Re: Таймер с часами реального времени.

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= писал(а):Сделать отдельно функцию возращающую по отдельным компонентам даты и времени одно число - время в секундах с какой-то даты.

Да наверное завтра так и попробую.

Re: Таймер с часами реального времени.

dccharacter » 15 июн 2011, 21:23

Можно создать две переменные типа структура и сравнивать их.

Re: Таймер с часами реального времени.

=DeaD= » 15 июн 2011, 21:24

dccharacter писал(а):Можно создать две переменные типа структура и сравнивать их.

Можно по какой-то причине пропустить момент совпадения и тогда всё, пиши пропало :)

Re: Таймер с часами реального времени.

HarryStar » 15 июн 2011, 21:27

Вам не надо сравнивать больше или меньше. Вам нужно просто равенство. Это гораздо проще, тут надо сравнивать только часы и минуты и все. 2 IFа (и 1-2 строки конвертации из 16-10 формата). Наступило событие - выполняем его и выкидываем из очереди событий. Все. Никаких больше меньше.

Пропустить невозможно, т.к. проверка идет несколько раз в минуту.

Re: Таймер с часами реального времени.

Angel71 » 15 июн 2011, 21:32

2HarryStar, это общепринятый подход. всё остальное упрощение, оптимизация или просто изврат. :wink: в случае с аквакомпьютером это имхо изврат.
П.С. в смысле изврат вообще. всё начнается вот с таких простеньких проблем, когда нужно писать "велосипед". заканчивается тем, что в общем такой аквакомпьютер выйдет "слегка" примитивный простенький, а делать его будут сипец как долго. +есть проекты аквакомпьютеров (на соответствующих форумах) - можно скачать схему, прошивку и просто начать использовать. а заново велосипед изобретать, причём не дотягивающий или такого же уровня смысла мало.
Последний раз редактировалось Angel71 15 июн 2011, 21:49, всего редактировалось 1 раз.

Re: Таймер с часами реального времени.

paradox860 » 15 июн 2011, 21:46

Angel71 писал(а):2HarryStar, это общепринятый подход. всё остальное упрощение, оптимизация или просто изврат. :wink: в случае с аквакомпьютером это имхо изврат.
П.С. в смысле изврат вообще. всё начнается вот с таких простеньких проблем, когда нужно писать "велосипед". заканчивается тем, что в общем такой аквакомпьютер выйдет "слегка" примитивный простенький, а делать его будут сипец как долго.

Да я уже и так нагородил.Хотел сначала просто таймер включения выключения сделать.А получилось несколько таймеров для включения 4 нагрузок в разное время,Термостабилизатор с подключенным охдадителем и нагревателем, и ко всему этому прикрутил дисплей с неким подобием меню.А да и еще все необходимые значения сохраняются в ПЗУ.

Re: Таймер с часами реального времени.

Angel71 » 15 июн 2011, 21:56

ээээээээ, а чего только с таймеров? :oops: вы инет до этого на тему аквакомпьютеров вообще шерстили? на всевозможных аквафорумах проекты неоднократно попадались и таки весьма функциональные железки в итоге получались у людей. :oops: но имхо всё-равно простенькие. :) как по мне намного функциональней и не сильно дороже подобная автоматика получается на платах, начиная с уровня mini2440. нормальный экран (в сравнении с символьным), тач, много памяти, возможность писать код в среде с более богатыми готовыми библиотеками + еще много всяких плюшек.


Rambler\'s Top100 Mail.ru counter