Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[ATmega328],[C++ Builder 6] - Rozdzielenie danych kompasu hmc5883l w terminalu.

lbrycht 17 Sie 2013 20:48 1317 8
  • #1 17 Sie 2013 20:48
    lbrycht
    Poziom 7  

    Witam,

    Odbieram dane z magnetometru hmc5883l po I2C przez RS232 w postaci przykładowej:

    x= 91, y=-503, z=-209

    x= 90, y=-502, z=-208

    x= 94, y=-501, z=-209

    x= 89, y=-503, z=-209

    gdzie każda z linii to jednorazowa "paczka" wysłana to terminala.

    Jak rozdzielić każdą ze składowych, aby była w osobnym oknie i abym mógł dalej Build-erze pracować na nich?

    0 8
  • #2 17 Sie 2013 20:52
    piotrva
    Moderator na urlopie...

    lbrycht napisał:
    aby była w osobnym oknie

    Możesz sprecyzować o co Ci chodzi?
    Czy możesz zmienić format nadawania danych?
    Najlepiej ustawić ramkę prościej, czyli np.:
    >wartosc_x;wartosc_y;wartosc_z|
    I wtedy za pomocą funkcji lub choćby odpowiedniej pętli sobie to rozbijasz.

    0
  • #3 17 Sie 2013 21:08
    lbrycht
    Poziom 7  

    [ATmega328],[C++ Builder 6] - Rozdzielenie danych kompasu hmc5883l w terminalu.

    W jaki sposób tą ramkę zrobić?
    Realizować to już w kodzie wrzucanym na ATmegę?

    0
  • #4 17 Sie 2013 21:15
    BlueDraco
    Specjalista - Mikrokontrolery

    Wyobraź sobie, że masz te dane zapisane w pliku. Potrafisz czytać je z pliku i wyświetlać? Jak już sobie wyobrazisz i zrobisz to - zamiast pliku czytaj je z portu szeregowego.

    0
  • #5 17 Sie 2013 21:18
    lbrycht
    Poziom 7  

    Tylko, że chciałbym to realizować na bieżąco, bez zbędnego zapisywania.
    Moim zamierzeniem jest aby kompas w czasie rzeczywistym pokazywał azymut.

    0
  • #6 17 Sie 2013 21:38
    piotrva
    Moderator na urlopie...

    Ja podałem Ci sposób - robisz ramkę, w której symbole jednoznacznie oznaczają jej początek, koniec każdego pola i koniec całej ramki - i po tych znaczkach sobie rozróżniasz te pola, a potem normalnie dekodujesz dane - w końcu przetworzenie stringa na liczbę to nie problem, a nawet do tych pól możesz pakować stringi...

    0
  • #7 17 Sie 2013 21:41
    lbrycht
    Poziom 7  

    Te symbole wysyłane muszą być z ATmegi na komputer?

    1
  • #8 23 Paź 2013 16:05
    pjasinski91
    Poziom 8  

    Witam,

    Mam problem podobny do kolegi. Wysyłam z Atmegi różne dane:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Następnie przy pomocy książki Pana Daniluka stworzyłem coś takiego:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    Problem polega na tym, że nie potrafię rozdzielić moich danych na osobne edity.
    Czy ktoś życzliwy mógłby zamieścić kawałek kodu, który rozjaśniłby mi jak to zrobić?

    Z góry dziękuję,
    Piotrek

    0
  • #9 23 Paź 2013 17:27
    piotrva
    Moderator na urlopie...

    Kodu zamieścić nie mogę (komercyjny, a teraz nie mam czasu pisać czegoś dla przykładu), ale idea jest prosta.
    Ustalasz, że np. ramka składa się z |S|temp_zmienna|wys_zmienna|...|suma_kontrolna|X|.
    Teraz już możesz rozdzielić sobie ciąg znaków według |, znak S oznacza początek ramki, X jej koniec. Tyle.

    0