Форум arduino.ua
Форум
Користувачі
Пошук
Реєстрація
Вхід
Ви не увійшли.
Теми:
Активні
|
Без відповіді
Форум
»
Програмування Arduino
»
парсинг NMEA **проблема
»
Відповісти
Відповісти
Введіть повідомлення і натисніть Надіслати
Нік гостя
(Обов'язково)
E-mail
Повідомлення
(Обов'язково)
[quote=renoshnik]Якось так .... [code] [== C++ ==] #include <Adafruit_GFX.h> // Core graphics library #include <Adafruit_ST7735.h> // Hardware-specific library for ST7735 #include <SPI.h> #define TFT_CS 10 #define TFT_RST 8 // Or set to -1 and connect to Arduino RESET pin #define TFT_DC 9 Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); #include <SoftwareSerial.h> #include <string.h> SoftwareSerial gpsSerial(4, 3); // (RX, TX Arduino) String nmeaSentence = ""; // Переменная для хранения NMEA-строки const int timezoneOffset = 3; // Часовой пояс (например, +3 для EEST) boolean valid = false; // флаг валидности координат boolean drive = false; // флаг движения boolean overtime = false; // флаг время/скорость // char tokenKnot[] = "10.5"; // Пример тестового значения void setup() { // Serial.begin(9600); gpsSerial.begin(9600); tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab tft.setRotation(3); // Установка ориентации экрана tft.fillScreen(ST77XX_BLACK); // Установка начального цвета фона } void loop() { while (gpsSerial.available()) { char c = gpsSerial.read(); // Считать один символ из GPS if (c == 'n') { // Проверить, является ли символ концом NMEA-строки GPS_run(nmeaSentence); // Передать строку в GPS_run() для обработки nmeaSentence = ""; // Очистить строку для следующей NMEA-строки } else if (c != 'r') { // Игнорировать символ возврата каретки nmeaSentence += c; // Добавить символ к строке NMEA } } } void GPS_run(String nmea) { if (nmea.startsWith("$GPRMC")) { // Проверка на идентификатор строки // Serial.println("______________________________"); // Serial.println("_______ вход в $GPRMC ***1*** "); char nmeaCStr[nmea.length() + 1]; nmea.toCharArray(nmeaCStr, nmea.length() + 1); int fieldIndex = 0; char *token = nmeaCStr; char *commaPos = strchr(token, ','); // Найти первую запятую while (fieldIndex <= 13) { if (commaPos) { *commaPos = '