Problem mit GPS

Hallo zusammen, ich hoffe, mir kann jemand helfen…

ich versuche seit Tagen, einen GPS Empfänger in meinen Sketch zu integrieren.
Leider ohne Erfolg!

Es geht hier um folgende Konfiguration:
Arduino Mega
GPS Ublox Neo-6M
nrF24|01
SD Shield Deek-Robot

Zur Zeit habe ich folgende Bibliothek integriert:
NeoGPS https://github.com/SlashDevin/NeoGPS/tree/master/examples
Fast alle Beispiele funktionieren, nur nicht innerhalb meines Sketches …

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <SD.h>
#include <Wire.h>

#include <NMEAGPS.h>
#include <GPSport.h>
NMEAGPS  gps;
gps_fix  fix;

const int chipSelect = 44;
const uint64_t pipe = 0xE8E8F0F0E1LL;

float dataReceived[3];
bool newData = false;
RF24 radio(46, 47);

void setup() {
  Serial.begin(9600);
  while (!Serial)
    ;
  gpsPort.begin(9600);

  if (!SD.begin(chipSelect)) {
    Serial.println("SD-Card nicht erkannt");
    return;
  }

  Serial.println("Neue Messung");
  if (SD.exists("datalog.txt")) {
    SD.remove("datalog.txt");
  }

  radio.begin();
  radio.openReadingPipe(1, pipe);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
  getGPSData();
  writeHeader();
}

void writeHeader() {
  File dataFile = SD.open("datalog.txt", FILE_WRITE);
  if (dataFile) {
    dataFile.print("https://www.google.de/search?q=");
    dataFile.print(fix.longitude(),6);
    dataFile.print("+");
    dataFile.print(fix.latitude(),6);
    dataFile.println("");
    dataFile.println("------");
    dataFile.println("");
    dataFile.close();
  }
}

void getGPSData() {
  Serial.println(fix.latitude(), 6);
}

void loop() {
  fix = gps.read();
  getData();
  showData();
  logData();
}

void getData() {
  if ( radio.available() ) {
    radio.read( &dataReceived, sizeof(dataReceived) );
    newData = true;
  }
}

void showData() {
  if (newData == true) {
      if (dataReceived[0] == 1) {
      Serial.print("Warten");
    } else {
      Serial.print("Eingetroffen");
    }
    Serial.print(", ");
    Serial.print(dataReceived[1]);
    Serial.print(", ");
    Serial.print(dataReceived[2]);
    Serial.println(", ");
    Serial.println(fix.latitude(), 6);
    newData = false;
  }
}

void logData() {
  File dataFile = SD.open("datalog.txt", FILE_WRITE);
  if (dataFile) {
    dataFile.print(int(dataReceived[0]));
    dataFile.print(", ");
    dataFile.print(dataReceived[1]);
    dataFile.print(", ");
    dataFile.println(dataReceived[2]);
    dataFile.close();
  } else {
    Serial.println("error opening datalog.txt");
  }
  delay(1500);
}

Was ich benötige ist ein einmaliger Eintrag im Kopf meiner Datei datalog.txt,
um daraus einen G**gle Link zu generieren.

Leider zeigt er immer nur 0.000000, die Beispiel Sketche funktionieren aber auf Anhieb.
Für Unterstützung wäre ich sehr dankbar!

kulturbereicherer:
Ich denk die beiden beißen sich. Serielle Console entweder ausschalten oder GPS mit Softserial ansteuern oder zu einem grßeren Arduino wechseln der mehr von den Serial Dingern hat.

Was ist ein größer Arduino als der Arduino MEGA?

Der Arduino Mega bzw Arduino MEGA 2560 hat 4 serielle Schnittstellen. Nur die erste “serial” ist durch USB belegt. serial1 bis serial3 sind frei verfügbar.

Grüße Uwe

Vielen Dank für den Hinweis,

hab das mit dem Konflikt der Serial mal angegangen, war ein sehr guter Hinweis, aber leider noch nicht der Durchbruch ...

Habe jetzt die auf die Serial3 im Sketch umgestellt

#define gpsPort Serial3
#define GPS_PORT_NAME "Serial3"
#define DEBUG_PORT Serial

und die Pin Belegung angepasst.
Arduino Mega TX(14) => Ublox Neo RX
Arduino Mega RX(15) => Ublox Neo TX

Wenn ich mir den Ablauf über den Seriellen Monitor ansehe erscheint folgendes:

Neue Messung
Warten, 20.94, 12.34, 
0.000000
Warten, 20.94, 12.34, 
0.000000
Warten, 20.94, 12.34, 
0.000000
Warten, 20.94, 12.34, 
0.000000
......

Das sind die Daten die ich von meinem Arduino Nano per Funk erhalte!
Bis auf die 0.000000, die vom Arduino Mega per GPS eingefügt werden sollten ...

Nach ca. 1 Minute erscheint folgendes ...:

.....
Warten, 20.94, 12.34, 
0.000000
Location: 50.9415725,6.9578872, Altitude: 
Warten, 20.94, 12.34, 
50.9415725
Warten, 20.94, 12.34, 
50.9415725
Warten, 20.94, 12.34, 
50.9415725
Warten, 20.94, 12.34, 
50.9415725
Warten, 20.94, 12.34, 
50.9415725
.....

Also irgendwann bekommt er mit, dass dort GPS Daten vorhanden sind.

Die Beispiel Sketche sind wie gesagt sofort da, wahrscheinlich muss ich irgendetwas an der Reihenfolge ändern.
Hab schon einiges probiert (bin Neuling !), komme aber nicht zum gewünschten Ergebnis.

Könnte mir jemand einen Ansatz posten?
Danke im Voraus

Ein GPS-Empfänger braucht nach dem Einschalten (cold Start) bis zu 1 Minute um die Bahndaten der sichtbaren Sateliten zu empfangen und daraus die Entfernung und dadurch die Position errechnen zu können.
Darum ist das Verhalten normal.
Zum Rest der Nachricht kann ich wenig sagen.
Grüße Uwe

so… kurzes UPDATE

ich habe die while schleife richtig gesetzt, dann klappts direkt.

Jetzt bleibt nur noch der GPS Eintrag im Header …

void loop() {
  while (gps.available( gpsPort )) {
    fix = gps.read();
    getData();
    showData();
    logData();
  }
}

Vielleicht einer eine Idee?