парсер жпс
- Войдите на сайт для отправки комментариев
Пт, 16/02/2018 - 00:14
тк у меня всё еще ничег оне влезает в нану, то начал урезать лишнее - это ЖПС парсер
/* This Arduino sketch will log GPS NMEA data to a SD card every second */ #include <SoftwareSerial.h> #include <SD.h> // The Arduino pins used by the GPS module static const int GPS_ONOFFPin = A3; static const int GPS_SYSONPin = A2; static const int GPS_RXPin = A1; static const int GPS_TXPin = A0; static const int GPSBaud = 9600; static const int chipSelect = 10; // The GPS connection is attached with a software serial port SoftwareSerial Gps_serial(GPS_RXPin, GPS_TXPin); void setup() { // Init the GPS Module to wake mode pinMode(GPS_SYSONPin, INPUT); pinMode(GPS_ONOFFPin, OUTPUT); digitalWrite( GPS_ONOFFPin, LOW ); delay(5); if( digitalRead( GPS_SYSONPin ) == LOW ) { // Need to wake the module digitalWrite( GPS_ONOFFPin, HIGH ); delay(5); digitalWrite( GPS_ONOFFPin, LOW ); } // Open the debug serial port at 9600 Serial.begin(9600); // Open the GPS serial port Gps_serial.begin(GPSBaud); Serial.print("Initializing SD card..."); // make sure that the default chip select pin is set to // output, even if you don't use it: pinMode(10, OUTPUT); // see if the card is present and can be initialized: if (!SD.begin(chipSelect)) { Serial.println("Card failed, or not present"); // don't do anything more: return; } Serial.println("card initialized."); } int inByte = 0; // incoming serial byte byte pbyGpsBuffer[100]; int byBufferIndex = 0; void loop() { byte byDataByte; if (Gps_serial.available()) { byDataByte = Gps_serial.read(); Serial.write(byDataByte); pbyGpsBuffer[ byBufferIndex++ ] = byDataByte; if( byBufferIndex >= 100 ) { byBufferIndex = 0; File dataFile = SD.open("gps.txt", FILE_WRITE); // if the file is available, write to it: if (dataFile) { dataFile.write(pbyGpsBuffer, 100); dataFile.close(); } // if the file isn't open, pop up an error: else { Serial.println("error opening gps.txt"); } } } }
но чтото я гдето не верно разбираю и никак не могу понять что именно
результат работы
Tim: 200258.679
Lat: 5432.3446
Lon: 03618.1840
в долготе лишний символ цепляю - 0 спереди вылезает....
и может специ подскажете как можно еще ужать и оптимизировать код?
не тот скетч, изменить 1й пост нельзя
вот код
Всмысле откуда 0 берется? Из NMEA $GPRMC,125504.049,A,5542.2389,N,03741.6063,E,0.06,25.82,200906,,,*17 видите там после "N," Потом как преобразуете из строки в число он пропадет, ну если эстетика не позволяет можете сразу его убирать в строке )
З.Ы. Не ленитесь смотреть "сырой" вывод данных после получения их из любого источника. И для отладки элементарно использовать serial.println() чтобы посмотреть состояние всех промежуточных переменных.
спасибо, чтото я это не обратил внимания, думал и широта и долгота по 2 знака имеют....
а по оптимизации чтото можно еще сделать для уменьшения расхода памяти?
спасибо, чтото я это не обратил внимания, думал и широта и долгота по 2 знака имеют....
а по оптимизации чтото можно еще сделать для уменьшения расхода памяти?
Вспомните географию - широта от 0 до 90, а долгота от 0 до 180 - поэтому в широте 2 знака, а в долготе 3
да это вспомнил давно
вопрос по оптимизации остается открытым.... пока только уменьшил массивы чар да изменил пару переменных на инт - но это всего несколько байт....
и еще 1 момент с разбором числа
есть char[12] содержит
просто погрешность такая в координатах дает погрешность на земле порядка 10 метров..... + погрешность самого приемник +-10м - итого 20 метров расходжений както многовато