• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
port szeregowy przypisanie odczytanych wartości do zmiennych
#11
(13-05-2023, 21:02)Irvin napisał(a): Masz ładne linie tekstu. Jak program się uruchamia pierwszy raz nawiązując kontakt, to przylatują komunikaty z napisami w kilku liniach, jak linia zaczyna się od znaku innego niż '0' lub '1' to go wrzucasz w kosz. Potem lecą kolejne linie.
Jeśli za każdym razem jest taka struktura komunikatu, to robisz to wg przykładów z posta #7.

Ok, powoli zaczynam odczytywać wartości bezpośrednio ze sterownika Rotex, ale jak może zauważyliście ostatnia zmienna jest typu float.  Sterownik wysyła tą zmienną z przecinkiem, a nie znakiem kropki, dlatego też funkcja V = atof(strtokIndx) zwraca tylko część stałą czyli np zamiast 6.33 otrzymuję 6.00.
 
Odpowiedź
#12
Nic nie szkodzi, znak używany jako token można zmienić gdy licznik większy od "cośtam" na przecinek, wtedy masz część przed przecinkiem i po przecinku, coś jak tu:
command1 = strtok(NULL, ","); //dzielimy reszte napisu w miejscach gdzie jest ","
A wtedy pierwszą liczbę mnożysz x 1000, dodajesz do drugiej, jeśli druga jest zawsze jednym miejscem po przecinku to pomnóż ją x100 i masz 123,1 zamienione na 123100, jeśli to było napięcie 123,1V, to masz 123100 mV.
Nie musisz trzymać zmiennych we float, nawet jeśli to był float, można napięcie zapisać jako 123.1V albo 123100 mV, albo tak jak hektopascale, albo decymetry, centymetry, milimetry dla metra. Program działa szybciej, a ty unikasz niedoskonałości float.
Jak nie wiesz ile ma miejsc po przecinku to można ją obciąć do np. dwóch miejsc dzieleniem modulo %100, albo sprawdzasz ile ma znaków.
 
Odpowiedź
#13
(23-05-2023, 14:15)Irvin napisał(a): Nic nie szkodzi, znak używany jako token można zmienić gdy licznik większy od "cośtam" na przecinek, wtedy masz część przed przecinkiem i po przecinku, coś jak tu:
command1 = strtok(NULL, ","); //dzielimy reszte napisu w miejscach gdzie jest ","
A wtedy pierwszą liczbę mnożysz x 1000, dodajesz do drugiej, jeśli druga jest zawsze jednym miejscem po przecinku to pomnóż ją x100 i masz 123,1 zamienione na 123100, jeśli to było napięcie 123,1V, to masz 123100 mV.
Nie musisz trzymać zmiennych we float, nawet jeśli to był float, można napięcie zapisać jako 123.1V albo 123100 mV, albo tak jak hektopascale, albo decymetry, centymetry, milimetry dla metra. Program działa szybciej, a ty unikasz niedoskonałości float.
Jak nie wiesz ile ma miejsc po przecinku to można ją obciąć do np. dwóch miejsc dzieleniem modulo %100, albo sprawdzasz ile ma znaków.

Udało się, chociaż w trochę inny sposób....sprawdzam na bieżąco przychodzący znak i jeżeli jest ' ,  ' to zamieniam go na  ' . '
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości