Formatierung von Variablen

Hallo,

bitte verzeiht mir, wenn mir die richtigen Wort fehlen - ich hab vor vier Wochen mit all dem hier angefangen…

Ich lese eine GPS Antenne aus und separiere die Worte aus dem GPRMC Satz.
Das passiert auf dem Sketch “Arduino GPS NMEA parser” von ICanBuild.it.

Jetzt will ich mit Länge und Breite weiterarbeiten.
Im GPRMC Satz sind diese in [Grad Minuten PUNKT Sekunden Hunderstel] vorhanden.
NMEA parser macht daraus schonmal [Grad Minuten Sekunden Hunderstel], deklariert als uint32_t => “latitude”.
Ich brauche jetzt [Grad PUNKT dezimaler Rest]

Ich habe versucht ein Array mit “latitude” zu laden, bekomme aber “Type assignment” Fehler.

Hat mir jemand einen Tip, in welche Richtung ich vorgehen soll?

viele Grüße
Dominik

Poste mal bitte den Code den Du dafür schon hast, das macht es leichter den Fehler zu verstehen und evtl. Dein Problem zu lösen.

Bitte nicht zu laut lachen…
Ich kopier mir was zusammen, und schau ob es geht.
Aber so langsam verstehe ich schon ein bischen, was da passiert (oder auch nicht).

// A simple sketch to read GPS data and parse the $GPRMC string
// see http://www.ladyada.net/make/gpsshield for more info
 
#include <SoftwareSerial.h>

SoftwareSerial mySerial =  SoftwareSerial(2, 3);

#define GPSRATE 9600

// GPS parser for 406a
#define BUFFSIZ 90 // plenty big
#define USERID 123456789
#define STATUS 0
char buffer[BUFFSIZ];
char *parseptr;
char buffidx;
int  hour, minute, second, year, month, date;  //char weil führende Nullen erhalten bleiben müssen
uint32_t tmp, tmp2, longitude, latitude,latitude2,longitude2;
uint8_t groundspeed, groundspeed2, trackangle, trackangle2,magdev;
int checksum;
char latdir, longdir, magdir;
char status;

 
void setup()
{
  
  Serial.begin(38400);
  mySerial.begin(GPSRATE);
 
  // prints title with ending line break
  Serial.println("GPS parser"); 
}
  uint32_t parsedecimal(char *str) {
  uint32_t d = 0;
  
  while (str[0] != 0) {
   if ((str[0] > '9') || (str[0] < '0'))
     return d;
   d *= 10;
   d += str[0] - '0';
   str++;
  }
  return d;
}
  
 
void loop()//###################
{
  
 
  //Serial.print("\n\rread: ");
  readline();
  
   // check if $GPRMC (global positioning fixed data)
  if (strncmp(buffer, "$GPRMC",6) == 0) {
    Serial.println(buffer); // das ist der original Satz aus dem GPS
    
    
    // hhmmss time data
    parseptr = buffer+7;
    tmp2 = parsedecimal(parseptr);

    //Serial.print(tmp2/1);
    //Serial.println(".000");
    hour = tmp2 / 10000;
    minute = (tmp2 / 100) % 100;
    second = tmp2 % 100;
    //Serial.println (second);


    parseptr = strchr(parseptr, ',') + 1;
    status = parseptr[0];
    //Serial.println(status);
 
    // grab latitude & long data
    // latitude
    parseptr = strchr(parseptr, ',') + 1;
    latitude = parsedecimal(parseptr);
    if (longitude != 0) {
      latitude *= 10000;
      parseptr = strchr(parseptr, '.')+1;
      latitude += parsedecimal(parseptr);

    }
    //Serial.println(latitude);
   
    // read latitude N/S data
    parseptr = strchr(parseptr, ',') + 1;
    if (parseptr[0] != ',') {
      latdir = parseptr[0];
    }
    //Serial.println(latdir);
    
    // longitude
    parseptr = strchr(parseptr, ',')+1;
    longitude = parsedecimal(parseptr);
    if (longitude != 0) {
      longitude *= 10000;
      parseptr = strchr(parseptr, '.')+1;
      longitude += parsedecimal(parseptr);
    }

    //Serial.println(longitude);

    
    // read longitude E/W data
    parseptr = strchr(parseptr, ',')+1;
    if (parseptr[0] != ',') {
      longdir = parseptr[0];
    }
    //Serial.println(longdir);
 
    // groundspeed 
    parseptr = strchr(parseptr, ',')+1;
    groundspeed = parsedecimal(parseptr);
    parseptr = strchr(parseptr, '.')+1;
    groundspeed2 = parsedecimal(parseptr);
    //Serial.println(groundspeed);
 
    // track angle ####################### geht nicht
    parseptr = strchr(parseptr, ',')+1;
    trackangle = parsedecimal(parseptr);
    parseptr = strchr(parseptr, '.')+1;
    trackangle2 = parsedecimal(parseptr);
    //Serial.println(trackangle);
 
    // date
    parseptr = strchr(parseptr, ',')+1;
    tmp = parsedecimal(parseptr);
    date = tmp / 10000;
    month = (tmp / 100) % 100;
    year = tmp % 100;
    //Serial.print(date);
    //Serial.print(month);
    //Serial.println(year);
    
    // Magnetische Abweichung
    parseptr = strchr(parseptr, ',')+1;
    magdev = parsedecimal(parseptr);
    //Serial.println(magdev);
    
    // magnetische Richtung
    parseptr = strchr(parseptr, ',')+1;
    magdir = parsedecimal(parseptr);
    //Serial.println(magdir);
    
    
    // Checksum
    parseptr = strchr(parseptr, ',')+1;
    checksum = parsedecimal(parseptr);
    //Serial.println(checksum);
        
 
 QVPOS_Satz(); //Modulaufruf für QVPOS Datensatz


  }
}
 

void readline(void) {//#######################################
  char c;
 
  buffidx = 0; // start at begninning
  while (1) {
      c=mySerial.read();
      if (c == -1)
        continue;
      //Serial.print(c);
      if (c == '\n')
        continue;
      if ((buffidx == BUFFSIZ-1) || (c == '\r')) {
        buffer[buffidx] = 0;
        return;
      }
      buffer[buffidx++]= c;
  }
}


void QVPOS_Satz(){//###########################################
 
   Serial.print("$QVPOS,");
   Serial.print(USERID);
   Serial.print(",");
   Serial.print(STATUS);
   Serial.print(",");
   if (date<10){Serial.print("0");}//erzwingt führende Null
   Serial.print(date, DEC);
   if (month<10){Serial.print("0");}//erzwingt führende Null
   Serial.print(month, DEC);
   if (year<10){Serial.print("0");}//erzwingt führende Null
   Serial.print(year, DEC);
   Serial.print(",");
   if (hour<10){Serial.print("0");}//erzwingt führende Null
   Serial.print(hour, DEC); 
   if (minute<10){Serial.print("0");}//erzwingt führende Null
   Serial.print(minute, DEC); 
   if (second<10){Serial.print("0");}//erzwingt führende Null
   Serial.print(second, DEC);
   Serial.print(",");
   if (latdir == 'S')
       Serial.print('-');
   Serial.print(latitude); //Punkt auf sechste Stelle von Rechts / alles hinterm Punkt in DEC
   Serial.print(",");
   if (longdir == 'W')
       Serial.print('-');
   Serial.print(longitude); //Punkt auf sechste Stelle von Rechts / alles hinterm Punkt in DEC
   Serial.print(",");
   if (groundspeed2<10);{Serial.print("0");} //erzwingt führende Null
   Serial.print (groundspeed2);
   Serial.print(".");
   if (groundspeed2<10)
   Serial.print (groundspeed2);
   Serial.print(",");              
   Serial.print(trackangle);      //Fake Richtung
   Serial.print(",");              
   Serial.print("0.00");          //Fake Höhe
   Serial.println(Checksum,HEX);          //geht nicht
 }