Ich würd das so machen:
MfG KlebwaxCode:int32_t wert; wert = gps[offset + 0]; wert |= gps[offset + 1] << 8; wert |= gps[offset + 2] << 16; wert |= gps[offset + 3] << 24;
Ich will vom GPS Empfänger das UBX Protokoll auslesen, geht soweit das der Start von der Nachricht und Nachricht ID erkannt wird.
Die Werte bekomme ich aber nicht heraus. Der Wert auf den ich aus bin besteht aus 4 Bytes im little Endian Format.
Mein Problem: ich bekomme derzeit nichtmal ein einziges Byte umgewandelt.
Probiert habe ich:
Temp ist aber immer Null (Ausgabe LCD mit itoa(temp,buffer,10);lcd_puts(buffer); )Code:x[0]=gps_string[3+offset];x[1]= 0; temp=atoi(x);
Ebenso probiert (die ersten 2 Byte würde mir genügen):
undCode:x[0]=gps_string[3+offset]; x[1]=gps_string[2+offset]; x[2]=0; pos_acc=atoi(x);
Es kommt immer nur Null raus.Code:x[0]=gps_string[3+offset]; x[1]=gps_string[2+offset]; x[2]=0; pos_acc=strtol(x, NULL, 10);
Werte sollten zwischen 100-5000 liegen. Dazu lasse ich mir den 2D Accuracy Wert übers NEMA Protokoll ausgeben der ungefähr die gleiche Größenodung hat wie der 3D Wert den ich hier über ubx Protokoll auslesen will.
Die ganze GPS Auswertung funktioniert bei mit mit atoi, warum hier nicht?
Wie muss man das richtig umwandeln?
Werte kommen vom GPS Empfänger raus, erstens werden die ersten 4 Bytes der Nachricht überprüft (2 Sync Char, 1 Byte Class, 1 Byte ID) um die richtige Nachricht zu erkennen, was ich mir anzeige lassen, und am uBlox Center kann man sich auch die Daten ansehen.
LG!
alles über meinen Rasenmäherroboter (wer Tippfehler findet darf sie gedanklich ausbessern, nur für besonders kreative Fehler behalte ich mir ein Copyright vor.)
Ich würd das so machen:
MfG KlebwaxCode:int32_t wert; wert = gps[offset + 0]; wert |= gps[offset + 1] << 8; wert |= gps[offset + 2] << 16; wert |= gps[offset + 3] << 24;
Strom fließt auch durch krumme Drähte !
Danke, das schein zu funktionieren!
Warum muss man hier nicht atoi() verwenden??? Dachte ich muss die Werte vom UART zuerst in Zahlen umwandeln und dann wieder neu in richtiger Reihenfolge zusammenbauen.
alles über meinen Rasenmäherroboter (wer Tippfehler findet darf sie gedanklich ausbessern, nur für besonders kreative Fehler behalte ich mir ein Copyright vor.)
UART ist hier unerheblich, das beschreibt nur den Datentransport nicht die Kodierung. atoi() heißt lang "ascii to integer", deine Daten sind aber nicht ASCII kodiert sondern binär, genauer 4 * 8 Bit binär, low Byte first. Und die werden in der richtigen Reihenfolge zusammengesetzt, an der richtigen Stelle in das 32 Bit int "hinein geodert".
MfG Klebwax
Strom fließt auch durch krumme Drähte !
Jetzt habe ich es kapiert, stehe mit den Arten der Datenkodierung immer etwas auf Kriegsfuß bis ich es verstehe
LG Werner
alles über meinen Rasenmäherroboter (wer Tippfehler findet darf sie gedanklich ausbessern, nur für besonders kreative Fehler behalte ich mir ein Copyright vor.)
Lesezeichen