Ich hoffe ich hab hier den richtigen Bereich erwischt, sonst bitte verschieben.

Hallo,
ich bin neu hier und gerade erst wieder in das Programmieren eingestiegen, habe zwar schon in der Schule mal mit TP6 und Basic gearbeitet und wollte mir jetzt mal an einem Arduino versuchen, nachdem die ganzen standardübungen wunderbar geklappt haben hab ich mir den LS20031 bestellt. Wenn ich den empfänger direkt an Pin 0 und Pin 1 (RX => TX / TX => RX) hänge habe ich mit GPS Fox oder Mini GPS auch sofort eine Verbindung, da 57600 jedoch etwas schnell war habe ich mit einem FTDI Breakout Board alle Sätze bis auf den GPRMC und den GPGGA geaktiviert, Frequenz auf 1Hz und Baud 4800 gesetzt. Seit der Änderung spuckt er gelegentlich komische Daten aus wenn RX und TX angeschlossen sind, ohne RX sind die Ausgabesätze alle ok.

Zitat Zitat von Nur TX
$GPGGA,203619.000,5341.2901,N,01008.3782,E,1,7,1.0 2,42.9,M,45.8,M,,*6F
$GPRMC,203619.000,A,5341.2901,N,01008.3782,E,1.02, 133.48,211211,,,A*61
$GPGGA,203620.000,5341.2901,N,01008.3789,E,1,7,1.0 2,42.9,M,45.8,M,,*6E
$GPRMC,203620.000,A,5341.2901,N,01008.3789,E,1.01, 127.36,211211,,,A*6F
$GPGGA,203621.000,5341.2897,N,01008.3794,E,1,7,1.0 2,43.1,M,45.8,M,,*64
$GPRMC,203621.000,A,5341.2897,N,01008.3794,E,0.67, 128.16,211211,,,A*60
$GPGGA,203622.000,5341.2893,N,01008.3798,E,1,7,1.0 2,43.0,M,45.8,M,,*6E
Bei RX und TX waren die Zeilen teilweise nicht richtig getrennt (mehrer Sätze in einer Zeile und zwischen den Sätzen irgendwelche Zeichen, als würde die Baudrate nicht passen.


Mit dem Beispielprogramm und der Bibliothek TinyGPS hat er jedoch absolut keine Ausgabe von Daten, das zeigt er mir jedoch:
Testing TinyGPS library v. 10
by Mikal Hart

Sizeof(gpsobject) = 103
(nur TX GPS => RX Arduino), langsam bin ich am verzweifeln da ich jetzt schon 2 Wochen am probieren bin und keine Idee mehr habe woran es liegen könnte.

Das LSM303DLH ( 3 Achs Kompass/ Beschleunigungssensorboard) habe ich zum Laufen bekommen indem ich statt dem Mega ADK in der Entwicklungsumgebung das Mega 2560 ausgewählt hab da gab es jedoch nur beim Kompilieren Fehler beim GPS brachte das keine Änderung.

Code:
#include <TinyGPS.h>
#include <NewSoftSerial.h>


/* This sample code demonstrates the normal use of a TinyGPS object.
   It requires the use of NewSoftSerial, and assumes that you have a
   4800-baud serial GPS device hooked up on pins 2(rx) and 3(tx).
*/

TinyGPS gps;
NewSoftSerial nss(2, 3);

void gpsdump(TinyGPS &gps);
bool feedgps();
void printFloat(double f, int digits = 2);

void setup()
{
  Serial.begin(9600);
  nss.begin(4800);
  
  Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
  Serial.print("Sizeof(gpsobject) = "); Serial.println(sizeof(TinyGPS));
  Serial.println();

}

void loop()
{
  bool newdata = false;
  unsigned long start = millis();

  // Every 5 seconds we print an update
  while (millis() - start < 5000)
  {
    if (feedgps())
      newdata = true;
  }
  
  if (newdata)
  {
    Serial.println("Acquired Data");
    Serial.println("-------------");
    gpsdump(gps);
    Serial.println("-------------");
    Serial.println();
  }
}

void printFloat(double number, int digits)
{
  // Handle negative numbers
  if (number < 0.0)
  {
     Serial.print('-');
     number = -number;
  }

  // Round correctly so that print(1.999, 2) prints as "2.00"
  double rounding = 0.5;
  for (uint8_t i=0; i<digits; ++i)
    rounding /= 10.0;
  
  number += rounding;

  // Extract the integer part of the number and print it
  unsigned long int_part = (unsigned long)number;
  double remainder = number - (double)int_part;
  Serial.print(int_part);

  // Print the decimal point, but only if there are digits beyond
  if (digits > 0)
    Serial.print("."); 

  // Extract digits from the remainder one at a time
  while (digits-- > 0)
  {
    remainder *= 10.0;
    int toPrint = int(remainder);
    Serial.print(toPrint);
    remainder -= toPrint; 
  } 
}

void gpsdump(TinyGPS &gps)
{
  long lat, lon;
  float flat, flon;
  unsigned long age, date, time, chars;
  int year;
  byte month, day, hour, minute, second, hundredths;
  unsigned short sentences, failed;

  gps.get_position(&lat, &lon, &age);
  Serial.print("Lat/Long(10^-5 deg): "); Serial.print(lat); Serial.print(", "); Serial.print(lon); 
  Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");
  
  feedgps(); // If we don't feed the gps during this long routine, we may drop characters and get checksum errors

  gps.f_get_position(&flat, &flon, &age);
  Serial.print("Lat/Long(float): "); printFloat(flat, 5); Serial.print(", "); printFloat(flon, 5);
  Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");

  feedgps();

  gps.get_datetime(&date, &time, &age);
  Serial.print("Date(ddmmyy): "); Serial.print(date); Serial.print(" Time(hhmmsscc): "); Serial.print(time);
  Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");

  feedgps();

  gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
  Serial.print("Date: "); Serial.print(static_cast<int>(month)); Serial.print("/"); Serial.print(static_cast<int>(day)); Serial.print("/"); Serial.print(year);
  Serial.print("  Time: "); Serial.print(static_cast<int>(hour)); Serial.print(":"); Serial.print(static_cast<int>(minute)); Serial.print(":"); Serial.print(static_cast<int>(second)); Serial.print("."); Serial.print(static_cast<int>(hundredths));
  Serial.print("  Fix age: ");  Serial.print(age); Serial.println("ms.");
  
  feedgps();

  Serial.print("Alt(cm): "); Serial.print(gps.altitude()); Serial.print(" Course(10^-2 deg): "); Serial.print(gps.course()); Serial.print(" Speed(10^-2 knots): "); Serial.println(gps.speed());
  Serial.print("Alt(float): "); printFloat(gps.f_altitude()); Serial.print(" Course(float): "); printFloat(gps.f_course()); Serial.println();
  Serial.print("Speed(knots): "); printFloat(gps.f_speed_knots()); Serial.print(" (mph): ");  printFloat(gps.f_speed_mph());
  Serial.print(" (mps): "); printFloat(gps.f_speed_mps()); Serial.print(" (kmph): "); printFloat(gps.f_speed_kmph()); Serial.println();

  feedgps();

  gps.stats(&chars, &sentences, &failed);
  Serial.print("Stats: characters: "); Serial.print(chars); Serial.print(" sentences: "); Serial.print(sentences); Serial.print(" failed checksum: "); Serial.println(failed);
}
  
bool feedgps()
{
  while (nss.available())
  {
    if (gps.encode(nss.read()))
      return true;
  }
  return false;
}
Gruß Arne