У меня довольно странная проблема с GPS-датчиком GP635T, подключенным к Intel Edison. Я использую C ++ и Eclipse для его программирования.
Если я попытаюсь получить данные, как это
message = serialGPS.readStr(100);
startPosition = message.find('$');
endPosition = message.find("\n");
std::cout << "Complete message: " << message << std::endl;
Я получаю длинный вывод, состоящий из всех типов поддерживаемых сообщений от $GPGGA
в $GPTXT
(см. таблицу данных -> http://www.cypax.dk/pdf/GP-635T-121130.pdf). Но я хочу работать только с $GPGLL
-Сообщения. Поэтому я изменил код, чтобы найти индекс начала и конца этого сообщения:
message = serialGPS.readStr(100);
startPosition = message.find("$GPGLL");
endPosition = message.find('$', startPosition+1);
std::cout << "Complete message: " << message << std::endl;
Но с этим кодом переменная ‘message’ всегда состоит только из одного сообщения случайного типа. Я не знаю, почему это происходит, потому что я нигде не касаюсь переменной ‘message’ в моем коде.
Кроме того, тот же эффект происходит, если я удаляю / комментирую строки с message.find()
из. Я все еще получаю только одно сообщение случайного типа. Только первый блок кода показывает длинное сообщение.
Мне удалось решить проблему сейчас, не получая целую строку, но всегда получая один символ. С этим кодом это работает для меня.
while(serialGPS.dataAvailable(10))
{
message += serialGPS.readStr(1);
}