kan35 7 24 декабря, 2012 Опубликовано 24 декабря, 2012 · Жалоба Здравствуйте Решил попробовать инциализировать координаты в sirfStar4, но столкнулся с тем, что нужно вычислять неделю и день недели в нем (а эти данные не присутствуют в явном виде в NMEA строках). Помогите формулой или алгоритмом или даже куском кода, который вычисляет эти 2 числа. Заранее спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kan35 7 24 декабря, 2012 Опубликовано 24 декабря, 2012 · Жалоба Может кому пригодится. int what_day(short year, char month, char day) { int a = (14 - month) / 12; int y = year - a; int m = month + 12 * a - 2; return (7000 + (day + y + y / 4 - y / 100 + y / 400 + (31 * m) / 12)) % 7; } int what_week(short year, char month, char day) { unsigned short start_year = 1999; unsigned char start_month = 8; unsigned char start_day = 22; const unsigned char daysinmonth[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // count days in 1999 after aug 22 unsigned long day_counter = daysinmonth[start_month-1] - start_day; for (;start_month <= 11; start_month++) { day_counter += daysinmonth[start_month-1]; } for (;start_year < year-1; start_year++) { if (start_year%4) day_counter += 365; else day_counter += 366; } for (start_month = 1; start_month < month; start_month++) { if ( start_month == 2 && !(year%4)) day_counter += 29; else day_counter += daysinmonth[start_month-1]; } day_counter += day; return day_counter/7 + 1024; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
antis 1 24 декабря, 2012 Опубликовано 24 декабря, 2012 · Жалоба Может кому пригодится. ... if (start_year%4) day_counter += 365; else day_counter += 366; } ... for (start_month = 1; start_month < month; start_month++) { if ( start_month == 2 && !(year%4)) day_counter += 29; else day_counter += daysinmonth[start_month-1]; } ... Вот так и появляются проблемы 2000 года Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kan35 7 24 декабря, 2012 Опубликовано 24 декабря, 2012 · Жалоба Почему именно эти строки, в чем там проблема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
antis 1 24 декабря, 2012 Опубликовано 24 декабря, 2012 (изменено) · Жалоба Последние годы столетий, оканчивающиеся на два нуля, в трёх случаях из четырёх не являются високосными. Так, годы 1700, 1800 и 1900 не являются високосными, так как они кратны 100 и не кратны 400. Годы 1600 и 2000 — високосные, так как они кратны 400. Годы 2100, 2200 и 2300 — невисокосные. В високосные годы вводится дополнительный день — 29 февраля. Високосный год Изменено 24 декабря, 2012 пользователем antis Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kan35 7 24 декабря, 2012 Опубликовано 24 декабря, 2012 · Жалоба Спасибо, я наверное и не знал про это. Хотя в контексте GPS это не так критично, как я думаю. Год в NMEA кодирован 2 цифрами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
antis 1 24 декабря, 2012 Опубликовано 24 декабря, 2012 · Жалоба Спасибо, я наверное и не знал про это. Хотя в контексте GPS это не так критично, как я думаю. Год в NMEA кодирован 2 цифрами. И до 2100 года, еще надо дожить :). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kan35 7 24 декабря, 2012 Опубликовано 24 декабря, 2012 (изменено) · Жалоба Сделал инициализацию даты и координат командой $PSRF104 при старте модуля, но все равно определяет координаты не быстрее, чем через 45с. Модуль Quectel L30 (sirf star 4). Лучше не будет или что-то возможно не так? Изменено 24 декабря, 2012 пользователем kan35 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alechek 0 25 декабря, 2012 Опубликовано 25 декабря, 2012 · Жалоба А толку то от координат и времени, если у модуля нет информации о расположении спутников? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kan35 7 25 декабря, 2012 Опубликовано 25 декабря, 2012 · Жалоба Я так полагаю, что по координатам и времени можно узнать какие спутники сейчас должны быть видны. В документе по NMEA для sirf так и говорится, что это ускоряет процесс. Только не сильно заметно почему то. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fk1 0 25 декабря, 2012 Опубликовано 25 декабря, 2012 · Жалоба Решил попробовать инциализировать координаты в sirfStar4, но столкнулся с тем, что нужно вычислять неделю и день недели в нем (а эти данные не присутствуют в явном виде в NMEA строках). Помогите формулой или алгоритмом или даже куском кода, который вычисляет эти 2 числа. man strptime в общем случае. Самодельные алгоритмы ничем хорошим не кончаются (см. проблема 2000 года). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
krdmitry 0 25 декабря, 2012 Опубликовано 25 декабря, 2012 · Жалоба Я так полагаю, что по координатам и времени можно узнать какие спутники сейчас должны быть видны. В документе по NMEA для sirf так и говорится, что это ускоряет процесс. Только не сильно заметно почему то. Не заметно вообще? Или все-таки есть хоть какое-то ускорение? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kan35 7 25 декабря, 2012 Опубликовано 25 декабря, 2012 · Жалоба По скорости - не заметил улучшения - около окна - 45с. Хотя кажется, что тем не менее чувствительность возрасла, так как хоть и не быстро, но находит координаты даже в дальних углах комнаты, возможно это субъективно. Настораживает то, что поле того, как я закинул ему координаты и дату со временем - в NMEA сообщениях время не то, а обычное стартовое. Что наводит на мысль о том, что модуль команду не воспринял должным образом. Сомнений в том, что команда оформлена корректно - нет, чексуммы вычисляются автоматом и другие команды принимаются без вопросов. Попробовал модуль отключать софтверно на долгое время - результат такой, что спутники ищет так же как при холодно старте - долго и нудно. Так что склоняюсь к самому простому решению - поставить eeprom, в конце концов это не так дорого. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться