Опрос датчиков
- Войдите на сайт для отправки комментариев
Вс, 19/10/2014 - 14:37
К Arduino MEGA подключается куча различных датчиков. Акселерометр, магнитометр, гироском, 2 датчика температуры, датчик давление. А ко всему в придачу еещ и GPS. Скорочть опроса все этих датчиков (помимо GPS) давольно высокая.
Программа поочередно опрашивает датчики и GPS делает из всех данных 3 строки + GPS выглядит это так:
SN: 7; PRS_1= 99857; TMP= 24.2; U= 1.2; STATUS= 0;
AX: 7; X= 3040; Y= -3024; Z= 18528;
MG: 7; X= 94; Y= 575; Z= -1363;
И иногда приходят данные GPS (хотя в serial они льются постоянно и безпрерывно с частотой 1 раз в секунду). Вопрос состоит в том как не терять данные приходящие с GPS. Приложу код и то что приходит. https://yadi.sk/d/fndAOANhc8bAm
Я бы после комментария "// формируем строку GPS (GPS)" использовал один буфер на 10 байт и буфер под результирующую строку. А то у тебя получается 70 байт используется одноразово и висит в памяти. Тоже самое с датчиками.
Ты датчики вообще без задержки опрашиваешь? Т.е. не "датчики - gps - отправка - задержка", а "датчики - gps - отправка".
Если так, то добавь переменные глобальные для значений GPS и изменяй их по мере поступления информации с GPS-приёмника. Т.е. если в Serial, что-то упало, то обновляешь, если ничего не упало между опросами датчиков, то будут браться старые значения.
Спасибо. Мысль понял, испробую.
P.S.
Если в Serial что то упало то это что то там будет висеть до следущего обновления?
Если в Serial что есть, то отработает код после Serial.avialible() отработае и обновит переменные, если нет, то в переменных останутся старые значения.
Если в Serial что есть, то отработает код после Serial.avialible() отработае и обновит переменные, если нет, то в переменных останутся старые значения.
Это ясно, но если скажем:
то 2 пакета GPS потеряются (ведь так), а как их сохранить использовать какой то буфер?
Планировать программу так, чтобы потерь не было. Либо читать датчики на каждый третий проход, либо по таймеру каждые три секунды.
Тут получается, что значение GPS меняется каждый раз, а значения с датчиков раз в три секунды, а всё остальное время берутся старые.
Момент отправки выбирай сам. Самое главно сделать так, чтобы данные всегда были максимально актуальные.