Datum: 01.07.2008 19:15
Hallo,
ich parse den GPGGA GPS Satz und möchte die Uhrzeit am Display anzeigen.
ich erhalte: Gps.utctime = 170552;
Gps.hour = Gps.utctime / 10000;
Gps.second = Gps.utctime % 100;
Gps.minute =(Gps.utctime % 10000)/100;
Gps.hour ist dann 17
Gps.second ist dann 52
Gps.minute ist dann 5
wenn ichs mit dem Taschenrechner nachrechne stimmt es, aber im Betrieb
wird manchmal eine Sekunde ausgelassen.
Ist die Umrechnung oben so korrekt oder würdet ihr das anderst machen?
Datum: 01.07.2008 19:47
Ist Gps.utctime tatsächlich ein int (bzw.long)? (und warum ?) in den NMEA-Daten steht's doch als string:
char time_buffer[] = "170552"; // immer "hhmmss" int8_t std = (time_buffer[0]-'0') *10; std += time_buffer[1] - '0'; int8_t min = (time_buffer[2]-'0') *10; min += time_buffer[3] - '0'; int8_t sec = (time_buffer[4]-'0') *10; sec += time_buffer[5] - '0'; |
hth. Jörg ps.: das "-'0'" wird (spätestens dann) klar, wenn du einen Blick in die ASCII-Tabelle (in deinem C-Buch) wirfst ;)
Datum: 01.07.2008 21:14
void nmeaGPGGA(char* packet) { u08 i=6; char time_buffer[7]; if(packet[i]==',' && packet[i+1]==',')return; while(packet[++i] != ',')time_buffer[i-7]=packet[i]; Gps.hour = (time_buffer[0] - '0') *10; Gps.hour += time_buffer[1] - '0'; Gps.minute = (time_buffer[2] - '0') *10; Gps.minute += time_buffer[3] - '0'; Gps.second = (time_buffer[4] - '0') *10; Gps.second += time_buffer[5] - '0'; |
da ist wohl noch ein Fehler bei mir oder?
Datum: 01.07.2008 22:41
>> da ist wohl noch ein Fehler bei mir oder? Da hab ich keine Ahnung, DENN - ich weiß nicht, wie dein Programm aussieht - ich weiß nicht, was dein AVR (nicht) macht - ich weiß nicht, was dein AVR machen soll etc... Aber das Team von strcpy und strtok_r aus der Standardlib funktioniert bei mir
// Header struct date {int h; int m; int s;}; //Main: char s[] = "$GPGGA,191410,"\ "4735.5634,N,00739.3538,E,"\ "1,04,4.4,351.5,M,48.0,M,,*45"; char *wort, *end; char buffer[10]; struct date test; wort = strtok_r(s, ",", &end); wort = strtok_r(NULL, ",", &end); strncpy(buffer, wort, 7); test.h = (buffer[0] - '0') *10; test.h += (buffer[1] - '0'); test.m = (buffer[2] - '0') *10; test.m += (buffer[3] - '0'); test.s = (buffer[4] - '0') *10; test.s += (buffer[5] - '0'); |
hth Jörg ps. (mingw-gcc) PC-Programm im Anhang (da heißt die Funktion "strtok" und hat weniger argumente)
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel


