logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[M8][BASCOM] odczyt z GPS

Ficu 12 Mar 2011 23:41 2470 7
REKLAMA
  • #1 9269707
    Ficu
    Poziom 31  
    Witam,
    właśnie jestem w trakcie zabawy z GPSem, wstępny program udało mi się przygotować na podstawie tego co znalazłem w internecie ale mam problemy:
    1. nie mogę poprawnie wydzielić prędkości z danych odbieranych przez GPS:
    $GPVTG,165.48,T,,M,0.03,N,0.06,K,A*37
    prędkość nie zaczyna i kończy się zawsze w tych samych miejscach, odczytując Case 24 To 29 odczytuje ,0.06, jednak czasem prędkość potrafi się przesunąć i widzę tylko połowę albo coś zbędnego




    2. odczytuje prędkość z $GPVTG... a chciałbym jeszcze odczytać jedną daną z $GPGGA... tylko nie wiem jak dodać to do mojego programu odczytującego dane;

    3. jak zmierzyć dystans pokonany podczas jazdy? jak go bezpiecznie zapisywać w eeprom by nie zabić ciągłym zapisem pamięci?

    Mój cały program:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • Pomocny post
    #2 9269783
    kuuczoo
    Poziom 26  
    Co do twojego pierwszego problemu, to najprościej jest czytać ciąg nie z określonego miejsca, a za określonym znakiem. Wszystkie dane masz przedzielone przecinkami. Zakładam że tych przecinków jest stała ilość. Po prostu czytaj łańcuch po 7 przecinku do następnego przecinka i już i wtedy długość wcześniejszych danych nie ma znaczenia. Co do eepromu raczej nie pomogę, wiem że znajomy w podobnej sytuacji zrobił to tak, że zapisywał w eepromie ciągle inne miejsce i pamiętał adres tego miejsca.
    Dystans mierzymy zgodnie ze wzorem s = s0 + v*t. Czas między kolejnymi pomiarami prędkości znasz, zakładasz że w tych odstępach prędkość się nie zmieniła i działasz wg wzoru. Możesz też próbować liczyć dystans geometrycznie na podstawie współrzędnych, ele to chyba bardziej czasochłonne.
  • REKLAMA
  • #3 9270628
    Ficu
    Poziom 31  
    Z tego co kojarzę to do znajdowania jakiegoś znaku służy funkcja Instr(), dzięki niej znajdę 1 przecinek, muszę tak długo powtarzać tą funkcję aż znajdę odpowiednie przecinki czy można jakoś szybciej to zrobić?
  • #4 9271218
    kuuczoo
    Poziom 26  
    Łańcuch masz zapisany w tablicy. Robisz funkcję na zasadzie
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Nie odpowiadam za składnię gdyż już nie wszystko pamiętam, ale chodzi o ideę.
    W ten sposób właśnie znalazłeś początek i koniec kawałka tekstu z twoją
    prędkością.

    -------------------------------------------

    Przepraszam, dopiero teraz zauważyłem że piszesz w BASCOMie a ja w C, ale idea jest taka sama.
  • #5 9271356
    MaxX850
    Poziom 13  
    Ładujesz sobie interesującą Ciebie ramkę do bufora (najdłuższa ramka ma chyba 82 znaki) , a następnie szukasz właściwego przecinka i pobierasz potrzebną ilość znaków po tym przecinku. Poniżej przykładowa procedurka wyszukująca 3ci przecinek i ładująca 11 znaków po nim. Działało to bardzo dobrze w prostym lokalizatorze z GPS'em na programowym uarcie i GSM na sprzętowym.

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Ps. Mój program chodził na M32, więc mogłem sobie pozwolić na zmienną typu string*82
  • REKLAMA
  • #6 9272224
    nsvinc
    Poziom 35  
    MaxX850 napisał:
    [...]a następnie szukasz właściwego przecinka i pobierasz potrzebną ilość znaków po tym przecinku.

    Gwałt na parserach. Parser powinien przetwarzać od tokena do tokena, a nie konkretną ilość znaków. Dopiero wtedy może sprawdzić, czy to, co jest pomiędzy tokenami, jest akceptowalne, czy nie.
    Parsowanie po ilości znaków prędzej czy później kończy się katastrofą - raz rozjechany parser już nigdy nie zsynchronizuje się z ciągiem danych które ma sparsować.
  • #7 9272930
    MaxX850
    Poziom 13  
    To zależy od konkretnego przypadku. Tutaj wyszukujesz najpierw konkretną ramkę, później odliczasz właściwą ilość przecinków i dopiero pobierasz dane, więc niejako synchronizujesz parser w dwóch momentach. Akurat dane z gps'a do dość proste zadanie. Urządzenie pracuje od kilku miesięcy i nie ma problemu z analizą odebranych danych (logi zapisane na sd nie wykazują błędów).

    Ale generalnie przerobienie podanego fragmentu na Twój sposób nie powinno sprawić problemu.
  • REKLAMA
  • #8 9273438
    Ficu
    Poziom 31  
    Problem 1 rozwiązany, zrobiłem to tak:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Jako szukaną użyłem N ponieważ jest to stała w tej składni.
    Teraz próbuję pobrać dane z $GPGGA....
REKLAMA