Робот-сследователь с GPS

drzugrik
Offline
Зарегистрирован: 18.09.2016

Добрый день. Сейчас пишу диссертацию по САПР систем освещения (автоматическая правильная расстановка) и в рамках работы делаю внешний модуль-робота, который будет исследовать здание или помещение и определять характеристики освещенности.
Столкнулся с несколькими проблемами:
1. Время, которое получаю по GPS приходит по Гринвичу. Как его перевести в UTC формат с учетом часового пояса? Контроллер Arduino UNO, GPS модуль - GY-NEO6MV2 Ublox, библиотека - Adafruit Ultimate GPS.

2. Предусматривается 2 режима - свободный поиск и целенаправленное движение либо под управлением команды, липо в ручном управлении. При этом данные с датчиков замеряются постоянно в фоне не зависимо от того каким образом происходит управление с периодичностью например 2 секунды. А вот для управляемого режима нужно отслеживать Serial порт с частотой ну например 100 мс и увидев команду движения вперед или остановки - выполнять. Суть в том что разный период чтения данных с датчиков и с Serial порта, подскажите пожалуйста, как в таком случае засунуть их в loop ? Есть ли возможность запуска фонового процесса (опроса датчиков) независимо от основного (управление) ? 

Буду признателен за любые подсказки и пинки в нужном направлении. Спасибо!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Сопоставил сложность задачи и уровень поставленных вопросов ... знаете, если Вам реально нужно это сделать за разумный срок, а не просто потрындеть на форуме, идите в "Ищу исполнителя" и заказывайте. Причём, указывайте. что исполнитель должен быть в Вашем городе. Самому Вам в разумный срок такого точно не сделать и даже не запустить того, что кто-то сделает удалённо. Это реальный, добрый совет.

drzugrik
Offline
Зарегистрирован: 18.09.2016

Евгений, спасибо за совет. Но программа по сбору данных с датчиков у меня работает хорошо, управление работает стабильно. Но в данный момент у меня вот такие описанные сложности:

1. Время и дата записываются по Гринвичу (соответственно часовой пояс некорректный).
2. Считывание данных управления через Serial происходит с той же периодичностью что и опрос датчиков ( delay(2000); )

Возможно я несовсем корректно сформулировал свои вопросы, но все таки мне кажется достаточно понятно. Если Вы можете подсказать в каком направлении мне копать что бы понять как решить их (через внешние прерывания, "параллельные" процессы Threads, ... ) буду признателен. Если бы меня интересовала возможность купить программу и бездумно залить ее в устройство я бы так и задавал вопрос на соответствующих форумах в соответствующих разделах.

kasper007
Offline
Зарегистрирован: 23.05.2016

drzugrik пишет:

2. Считывание данных управления через Serial происходит с той же периодичностью что и опрос датчиков ( delay(2000); )

Избавтесь от delay(2000) и будет у вас считывание с той периодичностью, которая нужна:

unsigned long previous1,  previous2, current;
void setup() {
previous1 = millis();
previous2 = millis();
}

void loop() {
current = millis();
if (current-previous1>100) {
//с интервалом в 100 мсек выполняется первое действие
previous1 = current;
}

if (current-previous2>2000) {
//с интервалом в 2 сек выполняется второе действие
previous2 = current;
} }

 

 

drzugrik
Offline
Зарегистрирован: 18.09.2016

kasper007

Большое спасибо. Попробую.