jak dobrze odczytać dane z GPS

0

Witam,

Odbieram dane w ten sposób:

serialPort1.Read(dane, 0, 255);

textBox1.Text = System.Text.ASCIIEncoding.ASCII.GetString(dane);

Jednak potrzebuje dane w blokach, które zaczynają się od $ a kończą znakiem /r (zgodnie z NMEA).
Długość jednej lini wraz ze znakami początku i kończa to max 82 znaki

Jak odebrać, który zawiera się między tymi znakami.

Nie mam również pomysłu jak efektywnie odbierać dane. Tzn czy mam wsadzić nieskończoną pętle while, w której będę obierał dane(jak wtedy sterować resztą programu)?

0

Jak dla mnie trochę nieczytelnie to opisałeś. Poprawże błędy :)

Ten string, który pojawia ci się w textbox1 zawiera znaki '$' i '/r' ?

0

Odbieraj wszystko, najlepiej w osobny wątku. Mniej więcej w taki sposób:

bufor = '';
duzybufor ='';
lista_pobranych_komend = pusta
dopóki (nie zabito wątku) rób
{
    ustaw_timeout(100);
    czytaj_dostepne_znaki(bufor);
    duzybufor = duzybufor + bufor;
    dopóki (w buforze $) rób
    {
        jeśli (w buforze /r) rób
        {
            usuń z bufora wszystko przed $
            komenda = wytnij z bufora wszystko od $ do /r
            dodaj komenda do lista_pobranych_komend
        }
        w przeciwnym razie
            przerwij pętlę
    }
    jeśli (lista_pobranych_komend nie pusta) rób
    {
        synchronizuj lista_pobranych_komend z wątkiem głównym
        lista_pobranych_komend = pusta
    }
}
0

to co mi wyciąga to kolejne 255 znaków :

oto wyciąg danych :]

$GPGGA,153255.514,5215.3194,N,01910.6342,E,1,03,20.0,91.3,M,,,,0000*06
$GPGSA,A,2,17,04,15,,,,,,,,,,20.0,20.0,20.

$ się pokazuję /r to raczej się nie pokaże.

Chodzi mi o to żeby odbierać zawsze tyle:

$GPGGA,153255.514,5215.3194,N,01910.6342,E,1,03,20.0,91.3,M,,,,0000*06

i żeby odbierać to wtedy kiedy moduł GPS to wysyła ( zsychronizować odbiór z wysyłaniem).

0

a jak stworzyć w C# coś co będzie działało jednocześnie i niezależnie od siebie (wątki). Tzn z jednej stronie nieustanny odczyt danych GPS, z drugiej strony ich analiza i odpowiednia reakcja programu

0

Przecież w C# normalnie istnieje obsługa wątków..

Google wyłączyli?

http://msdn.microsoft.com/en-us/library/aa645740(VS.71).aspx

To, że znaku nie widać, nie znaczy, że bajtów tam nie ma.

0

to będzie mój pierwszy program w C# także jeszcze za wiele w nim nie potrafię.

0

Pamiętaj, że składni języka można nauczyć się w godzinę, ale pomysłowość i umiejętność szukania wymaga praktyki.

Zatem życzę powodzenia.

P.S. Wiesz od czego należy zaczynać programowanie? Od zlokalizowania dokumentacji..

0

programuje już parę lat w paru językach i wiem gdzie szukać informacji tylko, że nie mogę się dogrzebać akurat do tego jak rozdzielić dane.

Czy wczytanie znaków znak po znaku, aż do natrafienia na któryś ze znaku początku lub końca ma sens ?

0

Nie, jest zbyt wolne - czytaj wszystko, doklejaj do jednego ciągu (strumień) na końcu, a od początku odcinaj co już zinterpretowałeś.

1 użytkowników online, w tym zalogowanych: 0, gości: 1