problémy rozobrať gps dát

A

andy40185

Guest
Ahoj, ja používam Keilc51 complier naprogramovať svoj systém a ja sa stretávame nejaký problém, ako získať GPS dáta z formátu NEMA. Moje GPS modul EM411 (podobne ako EM406a len odlišujú od Tx a Rx pin) a spojenie s 89s51, taktiež zobrazuje na LCD displeji. Okrem toho, ja viem, funkciu "strtok" pre analýzu, ale ja to naozaj ako používať. Má niekto mi dať nejaké rady? alebo ukázať príklad na to? Ak chcem získať lat. a dlhá. hodnota z nasledujúcich údajov, ako naprogramovať? $ GPRMC, 123519,4807.038, N, 01131.000, E, 1,08,0.9,545.4, M, 46.9, M,, * 47 S pozdravom, Andy
 
Nebudem používať Keilc51. Spôsob je, ukladať UART dostane v poli. Ak '$' prijať, polia začínajú od 0. Potom si prečítajte 5 byte, že "GPRMC". Ak je to pravda, potom si prečítajte nasledujúce bajt. Ak tomu tak nie je "GPRMC", jednoducho ignorovať zvyšok dát. Môžete vidieť tento príklad [url = "http://adf.ly/4116/pic-lesson-gps-receiver"] C kód pre NMEA [/URL].
 
Začal by som od tej miery, že máte čisté GPRMC reťazec v poli. Tu je návod, ako môžete získať strtok jednotlivých parametrov:
Code:
 / / ******************************** unsigned char String [] = "GPRMC, 123519,4807.038, N, 01131.000, E, 1,08,0.9,545 4, M, 46.9, M,, * 47.", / / ​​unsigned char * string token [15]; / / ukazovateľ na držanie tokenu reťazca unsigned char i = 0; strcpy (token [i + +], strtok (string, "");. / / to CPY prvý token seprated v "," na znamenie [0] token [0] bude obsahovať reťazec "GPRMC" po vykonaní strcpy (token [i + +], strtok (0, "")); .. / / to CPY ďalší token seprated v "," na znamenie [1] token [1] bude obsahovať reťazec "123519" po vykonaní strcpy (token [i + +], strtok (0, ""));. / / token [2] bude obsahovať "4807.038" po vykonaní ............. a tak ďalej .... / / ***************************************** **
Dúfam, že sa to dá urobiť. Jej jednoduché .. S pozdravom, Salman
 
Dobrý deň! NMEA reťazce sú písané rovnakým spôsobom. Prečo nie definovanie štruktúry, ako je tento:
Code:
 struct {float NMEAStruct šírky a dĺžky, float, float rýchlosť, [atď ..]};
Spočiatku, môžete definovať štruktúru s veľmi málo prvkov, a tiež definovať funkciu, ktorá vracia ukazovateľ na nejakú štruktúru NMEA:
Code:
 NMEAStruct * ParseNMEAString (char * str) {/ / Kód nájsť zemepisnej šírky, dĺžky a rýchlosť. }
Potom v budúcnosti, ak potrebujete pridať ďalšie položky do štruktúry, nemusíte meniť kód, ktorý už funguje. Povedzme, že ste mali pokyn, ako LCDDisplay ods my_struct.latitude), potom tento kód bude aj naďalej fungovať aj potom, čo ste pridal ďalších členov do štruktúry. Samozrejme môžete použiť akýkoľvek druh varianty tejto metódy. Napríklad môžete definovať parser funkcie takto:
Code:
 void ParseNMEAString (NMEAStruct * S, char * str);
Dora.
 
Stretol som sa s nejakou problém analýze dát. Ja nasledovať kód, ktorý poskytol § 3, ale to nefunguje. tak, že niekto môže mi prosím?
 
Ktorá časť nefunguje .. Tento kód je testovaný, funguje to dobre. Okrem toho, že má malú chybu syntaxe. Vymeňte 2. riadok kódu s týmto: unsigned char * token [15], / / ​​ukazovateľ držať token reťazca
 
strcpy (token [i + +], strtok (string, ""); by mala byť zmena strcpy (token , strtok (string, ""));?
 
Nie, vyhlásenie o unsigned char * token [15]: V predchádzajúcom kóde u # 3: unsigned char * tokenov [15], by mala byť nahradená nasledovné: unsigned char * token [15], len názov premennej problém. Aké ďalšie chyby sa vám darí ..?
 
Ale počiatočná hodnota i = 0, takže po vykonaní inštrukcie "strcpy (token [i + +], strtok (string,", ");" token [1] bude obsahovať reťazec "GPRMC", nie token [0]. že jo?
 
nie .. i + + je príspevok zvýšenie .. to zvýši po vykonaní vyhlásenie. keď napíšem + + i, potom to bude zvyšovať pred spustením.
 
Ja si to ale aj napriek tomu si chybu. Mám poslať správu s mojím kódom na vás. Prosím, pomôžte mi vyriešiť tento problém ~ - Očakávam, že výstup na LCD 16x2 nasledovne: Lat: 4807,038 Dlouhý: 01131,000 [COLOR = "Silver"] [SIZE = 1] ---------- Post added at 18:59 ---------- Predchádzajúci príspevok bol o 18:01 ---------- [/SIZE] [COLOR = "Silver"] [SIZE = 1] ---- ------ Príspevok pridal v 19:25 ---------- Predchádzajúci príspevok bol o 18:59 ---------- [/SIZE] [/COLOR] Mám upravený kód, ktorý poradil, ale problém stále nie je vyriešený.
 
Som upravil kód, ktorý radil, ale problém stále nie je vyriešený.
 

Welcome to EDABoard.com

Sponsor

Back
Top