вывод координат GPS на экран

Lictor
Offline
Зарегистрирован: 01.10.2015

Доброго времени суток. 

Пытаюсь вывести на экран значения координат (double). Собственно, сам код

#include <TinyGPS++.h>
#include <SoftwareSerial.h>
static const int RXPin = 10, TXPin = 11;
static const uint32_t GPSBaud = 9600;
TinyGPSPlus gps;
SoftwareSerial ss(RXPin, TXPin);  //работа с gps модулем


#include <tinyFAT.h>
#include <UTFT.h>
#include <UTFT_tinyFAT.h>  //подключение библиотек экрана и работы с SD для экрана

extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];   //объявление встроенных шрифтов

UTFT myGLCD(R61581, 38, 39, 40, 41);  //инициализация экрана
UTFT_tinyFAT myFiles(&myGLCD);        //создание объекта экрана

void setup()
{
  
  Serial.begin(115200);
   myGLCD.InitLCD(LANDSCAPE);  //ориентация экрана
  myGLCD.clrScr(); //очистка экрана
  file.initFAT();  //??
  
  ss.begin(GPSBaud); //запуск gps модуля
}

void loop()
{
  while (ss.available() > 0)
    if (gps.encode(ss.read()))
      displayInfo();
}

void displayInfo()
{
  /*
   myGLCD.setFont(SmallFont);
  myGLCD.setBackColor(5, 53, 5);
  myGLCD.setColor(255, 255, 255);
  myGLCD.print("koordinaty i vremya", 5, 5);
  */
  Serial.print("Location: "); 
  if (gps.location.isValid())
  {
    Serial.print(gps.location.lat(), 6);
    Serial.print(",");
    Serial.print(gps.location.lng(), 6);
  }
  else
  {
    Serial.print("INVALID");
  }

  Serial.print("  Date/Time: ");
  if (gps.date.isValid())
  {
    Serial.print(gps.date.month());
    Serial.print("/");
    Serial.print(gps.date.day());
    Serial.print("/");
    Serial.print(gps.date.year());
  }
  else
  {
    Serial.print("INVALID");
  }
   Serial.println();
}

Стандартные примеры из библиотек для модуля работают отлично. Но при попытке хоть что-то (например, то что в скобках /*...*/) вписать в void displayInfo(), ардуино перестает считывать значения с модуля. Все приравниваеся к нулю. Читал на форумах, что недопустима задержка (delay и т.п.). Но ее и нет. Что уже не пробовал:

менять Serial.print(gps.date.month()); на myGLCD.printNumF(gps.location.lng(), 6, 50,50);

загружать значение в глобальную переменную типа double A = gps.location.lng();

И еще ряд извращений. Никак не могу понять, почему это происходит. В целом, хотел бы иметь значения координат в виде глобальных переменных для дальнейшей работы  с ними.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Вывод на дислей оч громоздкая процедура - может сделать обновление раз в секунду(или больше)???

Может стоит накапливать в буфер принимаемую строку и отправлять на обработку после приема символа возврата каретки?