d_kin, вы для себя это колхозите? Если для организации, то лучше купить готовый промышленный астротаймер. В них используют GPS модуль, можно один раз запрограммировать и больше никогда не знать забот. Ну а если самому собирать "велосипед", то опять же удобнее на GPS.
Делаю для себя, все упирается в цену. В самодельном лучше гибкость настройки, можно использовать разное время для нескольких выходных реле. Про GPS думал, но там полуподвальное помещение, пока решил попробовать на модуле часов.
Что-то я не нашел, где Вы пишете о требуемой точности установки времени восхода/захода. А без этого ответить на вопрос "потянет или не потянет" невозможно, не говоря уже о конкретном алгоритме.
МК Ардуино Нано 3.0. В программе 7500 символов + библиотеки Time.h и DS1307RTC.h, я переживаю влезет в ардуино или нет? По точности хода там все заключается в том, что раз в час данные берутся из двух массивов по 365 трех-четырех значных чисел (рассвет и зкат) и 1 раз в минуту сравнивается время - больше ли оно чем время рассвета и меньше, чем время заката, полученное из массивов.
в еепром 0 - это 25 декабря самый короткий день, рассвет допустим в 7:00
следующий рассвет в 7:02 значит из еепром надо домтать сл ячейку в которой записана "1"
следущий рассвет 7:08 значит в еепром дб "4" т.е. к 7:00 прибавить 8 минут (4 из еепром *2)
как то так
можно конечно и просто в массив, но я бы сделал с еепром
Про еепром мне тут уже 3-ий раз говорят, но думаю моя голова не разберется. А в чем опасность массива, который я создал? Если он не превышает память ардуины, то будет работать.
Что-то я не нашел, где Вы пишете о требуемой точности установки времени восхода/захода. А без этого ответить на вопрос "потянет или не потянет" невозможно, не говоря уже о конкретном алгоритме.
МК Ардуино Нано 3.0. В программе 7500 символов + библиотеки Time.h и DS1307RTC.h, я переживаю влезет в ардуино или нет? По точности хода там все заключается в том, что раз в час данные берутся из двух массивов по 365 трех-четырех значных чисел (рассвет и зкат) и 1 раз в минуту сравнивается время - больше ли оно чем время рассвета и меньше, чем время заката, полученное из массивов.
d_kin, Вы ставите телегу впереди лошади: еще не определились с требуемой точностью, а уже приводите детали реализации.
Почему 7500 символов?
Почему массивы? Почему два? Почему 3-4-значные?
Чем отличается "раз в час" от "раза в минуту"?
К чему это я. Я Вам уже предлагал использовать аналитику вместо массивов. Это будет строчек 5 кода и ни одного длинного массива. Но эта простая аналитика не учитывает преломления света в атмосфере, приводящего к сдвижке моментов восхода и заката во времени. В зависимости от требуемой точности это можно либо вообще не учитывать, либо учитывать в той или иной степени приближения. От степени приближания, соответственно, зависит объем кода. Но в любом случае, думаю, до 7500 символов будет очень далеко.
подумалось что nano на процессоре atmega8, но странно, там вроде 7168
andriano пишет:
Почему два?
восходы и закаты, тип int
И вообще. d_kin, почему бы не озвучить таблицы времени? А то какие-то сферические алгоритмы в вакууме. Вот int voshod [] = {0,555,554,554,553,... это что такое? Значит ли что 555=09:15, 553=09:13? Далее, нахер с какой целью в начале массива нули? Они что-нибудь делают, или просто для красоты?
подумалось что nano на процессоре atmega8, но странно, там вроде 7168
andriano пишет:
Почему два?
восходы и закаты, тип int
И вообще. d_kin, почему бы не озвучить таблицы времени? А то какие-то сферические алгоритмы в вакууме. Вот int voshod [] = {0,555,554,554,553,... это что такое? Значит ли что 555=09:15, 553=09:13? Далее, нахер с какой целью в начале массива нули? Они что-нибудь делают, или просто для красоты?
В описании Nano v.3
Флеш-память
32 Кб (ATmega328) при этом 2 Кб используются для загрузчика
ОЗУ
2 Кб (ATmega328)
EEPROM
1 Кб (ATmega328)
Я так понимаю программа заливается во флэш-память, это гораздо больше 7500 символов.
Правильно, 555 это время в минутах с начала суток, взяты с сайтов с данными восхода и захода солнца.
Массив начинается с нулевого значения, который я не использую. 1 января по моей формуле это 1 день года, поэтому нулевое значение масива я поставил нуль.
А чего не скачать готовую программу расчёта? Этого добра в сети, благо, навалом.
Что мне даст эта программа? Сайтов с рачетами полно, из данных, полученных с них я построил массив, который Вы мне дали в пример. Как это все к синусоиде и дате привязать я не знаю, да и зачем, если масив будет работать.
ЕвгенийП, вот не надо человеку сразу советовать эту функцию запихать в МК. Там 32х разрядная математика, ещё на стадии просто перевода исходника с чистого C на Wiring возникали тааааааааааакееееенные ошибки что ну его нахер. d_kin, от ардуины не убавится, если там будет конечная информация.
У меня тут была мысля на тему как оставить эту информацию во флеше, но не в виде таблицы:
Это та самая таблица разниц. Это окончательная версия условий, создающих время рассвета. У нас есть исходное t=555. Пусть x - номер дня, d - delta, на которую надо изменить t. Это надо сделать x раз. Например, есть дата 5 февраля. Это 36й день. Надо:
присвоить t=555;
поместить все условия в функцию, параметром которой будет x;
запустить цикл for(i=1;i<=36;i++) f(x);, то есть функцию 36 раз со значениями от 1 до 36.
внутри функции должно быть изменение t=t+d;
В результате в t должна оказаться та цифра, которая была в массиве на 36м месте. Проверять было лень но оно работает.
Порядок строк в условиях изменять нельзя, т. к. некоторые интервалы они проходят для одного значения d, а следующие неучтённые, но находящиеся в том же интервале для другого значения d. Теоретически можно ещё это сжать, а также подвергнуть такому же сжатию сами номера в массиве, то есть в два прохода. Но мне лень, это во-первых, во-вторых в среднем в одной строке 11 условий, строк 16, итого 176, итого на ассемблере они займут чуть больше половины килобайта (если считать cmp breg,byte где breg - регистр величиной в 1 байт, то есть по 3 байта на условие).
Тащемта, применяя этот вариант, ничем не выигрываем т. к. скомпилированный байт-код (ассемблер, то что будет находиться в hex файле) с этими инструкциями в общей сложности занимает примерно столько же сколько таблица + инструкции, перемещающие информацию из флеша в ОЗУ (pgm_read_byte(), массив byte data[] PROGMEM).
Тема поста "...как упростить" Вам показали куда идти... если Вы чего то не понимаете, - разбирайтесь... Не надо быть программистом чтоб написать Вашу программу, в ардуино всё построено для школьника. Делайте и пользуйте как у Вас получится. То ваше устройство вам его и пользовать...
Тема поста "...как упростить" Вам показали куда идти... если Вы чего то не понимаете, - разбирайтесь... Не надо быть программистом чтоб написать Вашу программу, в ардуино всё построено для школьника. Делайте и пользуйте как у Вас получится. То ваше устройство вам его и пользовать...
Конечно, программу с помощью многих участвовавших здесь в обсуждении я уже написал, приедет ардуино, буду тестрировать. Результат обязательно напишу здесь.
Все проверил, работает, только на ардуино мега 2560, на ардуино нано не хватает памяти для переменных.
d_kin,
я давно слежу за темой, но так и не понял, вот скажите, зачем Вам массив? Ну, вот правда, зачем? Тем более, что он вон в память не лезет.
Чем плохо воспользоваться библиотечной функцией расчёта времени восхода и заката, которая с некоторых версий есть прямо в бибилиотеках, поставяемых с IDE - даже скачивать ниоткуда не надо? Даёшь ей географические координаты и дату, а она спокойно возвращает время. Чем это для Вас плохо? Зачем такое дорогостоящее решение из-за которого даже плату менять пришлось?
Когда я спрашивал, никто не подсказал, что есть готовая библиотека TimeLord, которая возвращает время восхода и захода солнца по координатам и часовому поясу местности. Все предлагали свой рассчет вести.
По массиву, я с ними не работал, мне интересно проверить было.
Также по готовым библиотекам есть нарекания на расчет на нескольких форумах по отзывам. В случае с массивом не будет никаких неточностей.
Причём тут какой-то таймлорд? Я имею в виду штатную С-шную библиотеку, которая даже в стандарте языка описана. Впрочем, если Вам больше нравится массив - дело Ваше.
По поводу "никто не подсказал". Не скажу за всех, но почему я не подсказал, могу объяснить. Потому, что Вы не спрашивали. Вы с первого же поста спрашивали не "как узнать время восхода", а как организовать хранение в массиве и расчёт (перечитайте). Т.е. о чём Вы спросили, в том Вам и помогали. Спросили бы "как узнать время восхода", я бы Вам сказал ещё тогда. А так, я был уверен, что штатная библиотека Вам по каким-то причинам не подходит (ну, откуда мне знать, что Вы о ней просто не знаете - она существует уже лет тридцать - почти с тех пор как С появился) и вот сегодня любопытство таки одолело и я просил "по каким".
Так что ... внимательно подходите к формулировке вопросов и ответы будут Вас чаще радовать.
Координаты в секундах северной широты и восточной долготы (если долгота западная, то значение получится отрицательным). Для упрощения пересчёта градусов в секунды есть константа ONE_DEGREE
Параметр - дата в общем формате времени. Результат время (секунды от 01.01.2000 - в библиотеке есть функция, которая умеет их преобразовывать в впривычные форматы).
Когда я спрашивал, никто не подсказал, что есть готовая библиотека TimeLord, которая возвращает время восхода и захода солнца по координатам и часовому поясу местности. Все предлагали свой рассчет вести.
По массиву, я с ними не работал, мне интересно проверить было.
Также по готовым библиотекам есть нарекания на расчет на нескольких форумах по отзывам. В случае с массивом не будет никаких неточностей.
Про библиотеку я не знал. Я, программист из другой области, но работа с массивами и оптимизация кода это моя ежедненная работа, массив штука медленная и прожорливая. Если в массиве выявляется система, тогда лучше математика.
То что солнце всходит и заходит- проверял сходится, и то что функция синуса одназначно,только для тех районов где есть белые ночи нужно делать срез синуса. А так длина синусойды нам известна - это дней в году. Условная ось "х" это время на день весенне осенненого равно действия. Время на 21 июня и 21 декабря - это минимальная и максимальная амплитуда.
С философией закончил, если у Вас все работает раде бога не чего не трогайте.
d_kin, вы для себя это колхозите? Если для организации, то лучше купить готовый промышленный астротаймер. В них используют GPS модуль, можно один раз запрограммировать и больше никогда не знать забот. Ну а если самому собирать "велосипед", то опять же удобнее на GPS.
Делаю для себя, все упирается в цену. В самодельном лучше гибкость настройки, можно использовать разное время для нескольких выходных реле. Про GPS думал, но там полуподвальное помещение, пока решил попробовать на модуле часов.
Что-то я не нашел, где Вы пишете о требуемой точности установки времени восхода/захода. А без этого ответить на вопрос "потянет или не потянет" невозможно, не говоря уже о конкретном алгоритме.
МК Ардуино Нано 3.0. В программе 7500 символов + библиотеки Time.h и DS1307RTC.h, я переживаю влезет в ардуино или нет? По точности хода там все заключается в том, что раз в час данные берутся из двух массивов по 365 трех-четырех значных чисел (рассвет и зкат) и 1 раз в минуту сравнивается время - больше ли оно чем время рассвета и меньше, чем время заката, полученное из массивов.
в еепром 0 - это 25 декабря самый короткий день, рассвет допустим в 7:00
следующий рассвет в 7:02 значит из еепром надо домтать сл ячейку в которой записана "1"
следущий рассвет 7:08 значит в еепром дб "4" т.е. к 7:00 прибавить 8 минут (4 из еепром *2)
как то так
можно конечно и просто в массив, но я бы сделал с еепром
в еепром 0 - это 25 декабря самый короткий день, рассвет допустим в 7:00
следующий рассвет в 7:02 значит из еепром надо домтать сл ячейку в которой записана "1"
следущий рассвет 7:08 значит в еепром дб "4" т.е. к 7:00 прибавить 8 минут (4 из еепром *2)
как то так
можно конечно и просто в массив, но я бы сделал с еепром
Про еепром мне тут уже 3-ий раз говорят, но думаю моя голова не разберется. А в чем опасность массива, который я создал? Если он не превышает память ардуины, то будет работать.
Что-то я не нашел, где Вы пишете о требуемой точности установки времени восхода/захода. А без этого ответить на вопрос "потянет или не потянет" невозможно, не говоря уже о конкретном алгоритме.
МК Ардуино Нано 3.0. В программе 7500 символов + библиотеки Time.h и DS1307RTC.h, я переживаю влезет в ардуино или нет? По точности хода там все заключается в том, что раз в час данные берутся из двух массивов по 365 трех-четырех значных чисел (рассвет и зкат) и 1 раз в минуту сравнивается время - больше ли оно чем время рассвета и меньше, чем время заката, полученное из массивов.
d_kin, Вы ставите телегу впереди лошади: еще не определились с требуемой точностью, а уже приводите детали реализации.
Почему 7500 символов?
Почему массивы? Почему два? Почему 3-4-значные?
Чем отличается "раз в час" от "раза в минуту"?
К чему это я. Я Вам уже предлагал использовать аналитику вместо массивов. Это будет строчек 5 кода и ни одного длинного массива. Но эта простая аналитика не учитывает преломления света в атмосфере, приводящего к сдвижке моментов восхода и заката во времени. В зависимости от требуемой точности это можно либо вообще не учитывать, либо учитывать в той или иной степени приближения. От степени приближания, соответственно, зависит объем кода. Но в любом случае, думаю, до 7500 символов будет очень далеко.
нахерс какой целью в начале массива нули? Они что-нибудь делают, или просто для красоты?нахерс какой целью в начале массива нули? Они что-нибудь делают, или просто для красоты?В описании Nano v.3
Я так понимаю программа заливается во флэш-память, это гораздо больше 7500 символов.
Правильно, 555 это время в минутах с начала суток, взяты с сайтов с данными восхода и захода солнца.
Массив начинается с нулевого значения, который я не использую. 1 января по моей формуле это 1 день года, поэтому нулевое значение масива я поставил нуль.
d_kin, Вы ставите телегу впереди лошади: еще не определились с требуемой точностью, а уже приводите детали реализации.
Чем отличается "раз в час" от "раза в минуту"?
Минута получается точность. Синусоиды строить не хочу, т.к. посмтотрел астрономические формулы, они меня напугали.
посмтотрел астрономические формулы, они меня напугали.
Пугливый какой!
А чего не скачать готовую программу расчёта? Этого добра в сети, благо, навалом.
Пугливый какой!
А чего не скачать готовую программу расчёта? Этого добра в сети, благо, навалом.
Что мне даст эта программа? Сайтов с рачетами полно, из данных, полученных с них я построил массив, который Вы мне дали в пример. Как это все к синусоиде и дате привязать я не знаю, да и зачем, если масив будет работать.
Что мне даст эта программа?
Как что? Запихаете её в Ардуино и будете считать вместо того, чтобы массив хранить. Впрочем, дело Ваше, конечно.
ЕвгенийП, вот не надо человеку сразу советовать эту функцию запихать в МК. Там 32х разрядная математика, ещё на стадии просто перевода исходника с чистого C на Wiring возникали тааааааааааакееееенные ошибки что ну его нахер. d_kin, от ардуины не убавится, если там будет конечная информация.
У меня тут была мысля на тему как оставить эту информацию во флеше, но не в виде таблицы:
Это та самая таблица разниц. Это окончательная версия условий, создающих время рассвета. У нас есть исходное t=555. Пусть x - номер дня, d - delta, на которую надо изменить t. Это надо сделать x раз. Например, есть дата 5 февраля. Это 36й день. Надо:
присвоить t=555;
поместить все условия в функцию, параметром которой будет x;
запустить цикл for(i=1;i<=36;i++) f(x);, то есть функцию 36 раз со значениями от 1 до 36.
внутри функции должно быть изменение t=t+d;
В результате в t должна оказаться та цифра, которая была в массиве на 36м месте. Проверять было лень но оно работает.
Порядок строк в условиях изменять нельзя, т. к. некоторые интервалы они проходят для одного значения d, а следующие неучтённые, но находящиеся в том же интервале для другого значения d. Теоретически можно ещё это сжать, а также подвергнуть такому же сжатию сами номера в массиве, то есть в два прохода. Но мне лень, это во-первых, во-вторых в среднем в одной строке 11 условий, строк 16, итого 176, итого на ассемблере они займут чуть больше половины килобайта (если считать cmp breg,byte где breg - регистр величиной в 1 байт, то есть по 3 байта на условие).
Тащемта, применяя этот вариант, ничем не выигрываем т. к. скомпилированный байт-код (ассемблер, то что будет находиться в hex файле) с этими инструкциями в общей сложности занимает примерно столько же сколько таблица + инструкции, перемещающие информацию из флеша в ОЗУ (pgm_read_byte(), массив byte data[] PROGMEM).
Очень интересный подход, можно еще больше данных уместить с меньшей затратой памяти.
Тема поста "...как упростить" Вам показали куда идти... если Вы чего то не понимаете, - разбирайтесь... Не надо быть программистом чтоб написать Вашу программу, в ардуино всё построено для школьника. Делайте и пользуйте как у Вас получится. То ваше устройство вам его и пользовать...
Тема поста "...как упростить" Вам показали куда идти... если Вы чего то не понимаете, - разбирайтесь... Не надо быть программистом чтоб написать Вашу программу, в ардуино всё построено для школьника. Делайте и пользуйте как у Вас получится. То ваше устройство вам его и пользовать...
Конечно, программу с помощью многих участвовавших здесь в обсуждении я уже написал, приедет ардуино, буду тестрировать. Результат обязательно напишу здесь.
Все проверил, работает, только на ардуино мега 2560, на ардуино нано не хватает памяти для переменных.
Все намного проще, восход и заход солнца в течение года эта чистая синусоида или косинус кому как удобненне.
Полная амплидуда 366 дней для высокосного года и 365 обыного года
Определение высокосного года - Число(Год) / 4, если деление без остатка тогда высокосный.
Часовой таймер, немного математики, и не каких массивов.
Удачи.
Все проверил, работает, только на ардуино мега 2560, на ардуино нано не хватает памяти для переменных.
d_kin,
я давно слежу за темой, но так и не понял, вот скажите, зачем Вам массив? Ну, вот правда, зачем? Тем более, что он вон в память не лезет.
Чем плохо воспользоваться библиотечной функцией расчёта времени восхода и заката, которая с некоторых версий есть прямо в бибилиотеках, поставяемых с IDE - даже скачивать ниоткуда не надо? Даёшь ей географические координаты и дату, а она спокойно возвращает время. Чем это для Вас плохо? Зачем такое дорогостоящее решение из-за которого даже плату менять пришлось?
Объясните, пожалуйста.
Определение высокосного года - Число(Год) / 4, если деление без остатка тогда высокосный.
А 1900, или там 2100?
Когда я спрашивал, никто не подсказал, что есть готовая библиотека TimeLord, которая возвращает время восхода и захода солнца по координатам и часовому поясу местности. Все предлагали свой рассчет вести.
По массиву, я с ними не работал, мне интересно проверить было.
Также по готовым библиотекам есть нарекания на расчет на нескольких форумах по отзывам. В случае с массивом не будет никаких неточностей.
А 1900, или там 2100?
Так надо дожить еще))
Причём тут какой-то таймлорд? Я имею в виду штатную С-шную библиотеку, которая даже в стандарте языка описана. Впрочем, если Вам больше нравится массив - дело Ваше.
По поводу "никто не подсказал". Не скажу за всех, но почему я не подсказал, могу объяснить. Потому, что Вы не спрашивали. Вы с первого же поста спрашивали не "как узнать время восхода", а как организовать хранение в массиве и расчёт (перечитайте). Т.е. о чём Вы спросили, в том Вам и помогали. Спросили бы "как узнать время восхода", я бы Вам сказал ещё тогда. А так, я был уверен, что штатная библиотека Вам по каким-то причинам не подходит (ну, откуда мне знать, что Вы о ней просто не знаете - она существует уже лет тридцать - почти с тех пор как С появился) и вот сегодня любопытство таки одолело и я просил "по каким".
Так что ... внимательно подходите к формулировке вопросов и ответы будут Вас чаще радовать.
А как эта библиотека называется, работает? Её не нужно дополнительно добавлять? Может и проблемы то не было )
Ну, как, это штатная библиотека языка С (правда с нашим IDE до недавних пор не поставлялась, однако в 1.8.1 точно есть).
Пишете в начале скетча
а в скетче нужно задать свои координаты при помощи функции set_position
Ну, а дальше, восход
Параметр - дата в общем формате времени. Результат время (секунды от 01.01.2000 - в библиотеке есть функция, которая умеет их преобразовывать в впривычные форматы).
Здесь всё также, как с восходом
Спасибо!
Когда я спрашивал, никто не подсказал, что есть готовая библиотека TimeLord, которая возвращает время восхода и захода солнца по координатам и часовому поясу местности. Все предлагали свой рассчет вести.
По массиву, я с ними не работал, мне интересно проверить было.
Также по готовым библиотекам есть нарекания на расчет на нескольких форумах по отзывам. В случае с массивом не будет никаких неточностей.
Про библиотеку я не знал. Я, программист из другой области, но работа с массивами и оптимизация кода это моя ежедненная работа, массив штука медленная и прожорливая. Если в массиве выявляется система, тогда лучше математика.
То что солнце всходит и заходит- проверял сходится, и то что функция синуса одназначно,только для тех районов где есть белые ночи нужно делать срез синуса. А так длина синусойды нам известна - это дней в году. Условная ось "х" это время на день весенне осенненого равно действия. Время на 21 июня и 21 декабря - это минимальная и максимальная амплитуда.
С философией закончил, если у Вас все работает раде бога не чего не трогайте.
То что солнце всходит и заходит- проверял сходится, .... если у Вас все работает раде бога не чего не трогайте.
Наш человек!!!!! :))))