Hallo zusammen,
Die Signale meines GPS-Empfängers sollen ausgelesen und zerlegt werden. Eigentlich sollte strtok() das Mittel der Wahl sein. Unter den verschiedenen Sätzen, die das GPS.Gerät sendet, wähle ich den RMC-Satz aus. Soweit, sogut. Das Zerlegen dieses Satzes in seine einzelnen Tokens klappt aber nicht so wie gewünscht.
Folgende Zeilen sollten ein Anfang sein:
// nach Matthias Busse
// http://shelvin.de/den-nmea-0183-datensatz-gga-zerlegen-in-die-einzelnen-daten/
int inByte, start=0;
String nmea;
const char comma = ",";
char token;
void setup() {
Serial.begin(4800); // 4800 Baud Dateneingang und Konsole
Serial.println("***");
}
void loop() {
if (Serial.available()) { // sind Daten im Eingangspuffer
inByte = Serial.read(); // dann lesen
if ((start==0) && ((inByte == '$')||(inByte == '!'))) {
start=1; nmea=""; // bei $ oder ! starten
}
if(start==1) {nmea.concat((char)inByte);} // das Zeichen anhängen
if((inByte==13) && (start==1)) { // CR > Datensatzende > NMEA ausgeben
start=0;
if (nmea.substring(3,6) == "RMC") {
Serial.println(nmea); // auf Konsole ausgeben
Serial.println();
int nmea_len = nmea.length() + 1;
Serial.print("LEN: ");Serial.println(nmea_len);
char char_array[nmea_len];
nmea.toCharArray(char_array, nmea_len);
Serial.print("CHAR: ");Serial.println(char_array);
token = strtok(char_array, comma);
while (token != NULL) {
Serial.print("TOKEN: ");Serial.println(token);
token = strtok(NULL, comma);
}
}
}
}
}
Ich erhalte folgendes, sobald das GPS-Gerät "warmgelaufen" ist:
$GPRMC,144252.00,A,5123.30614,N,00752.98778,E,0.733,,100723,,,A*78
LEN: 68
CHAR: $GPRMC,144252.00,A,5123.30614,N,00752.98778,E,0.733,,100723,,,A*78
TOKEN: ⸮
Was bedeutet das spiegelverkehrte Fragezeichen? Wo ist mein Denkfehler? Umwandlung String zu Char?
Grüße und danke,
-richard