Tiny GPS++, Podzielenie danych na części - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Programowanie w Arduino (https://forum.arduinopolska.pl/dzial-programowanie-w-arduino) +--- Wątek: Tiny GPS++, Podzielenie danych na części (/watek-tiny-gps-podzielenie-danych-na-cz%C4%99%C5%9Bci) Strony:
1
2
|
Tiny GPS++, Podzielenie danych na części - Osiasty - 16-02-2020 Cześć. Potrzebuję pomocy z biblioteką Tiny GPS++. Kiedy używam kodu: Kod: Serial.println(gps.location.lng(),6); Chciałbym te otrzymane dane podzielić aby wyświetlały mi się po dwie cyfry i w ten sposób były odświeżane A = cyfra 1 i 2 (18); B = cyfra 3 i 4 (63); C = cyfra 5 i 6 (97); D = cyfra 7 i 8 (49); Czy jest taka możliwość zrobienia tego na Arduino bo nie mogę znaleźć żadnego przykładu tak podzielenia danych. Pozdrawiam. RE: Tiny GPS++, Podzielenie danych na części - kaczakat - 16-02-2020 Zajrzyj tu: https://www.arduino.cc/reference/tr/language/variables/data-types/stringobject/. Zamieniasz liczbę na string, potem ze stringa wyławiasz literki do kolejnego stringa. RE: Tiny GPS++, Podzielenie danych na części - Osiasty - 16-02-2020 Dzięki ale jako początkujący to napisanie tego zajmie mi chyba z rok bo mało jest na ten temat przykładów jak ma to wyglądać. Może ktoś zna jakiś prostszy sposób na tą konwersję. Napiszę do czego zmierzam może to ułatwi zrozumienie problemu. Urządzenie do którego mam wysłać dane przyjmuje je jako format BCD po 2 cyfry by je wyświetlić na LCD jako współrzędne. Więc muszę podzielić je na A,B,C,D. Następnie za pomocą komend: Kod: tmpData1[6] = bcd(A); // fourth two digits chciałbym wysłać je do urządzenia aby prawidłowo odczytał wartość współrzędnych. Chyba że istnieje jakiś inny sposób by to rozwiązać. RE: Tiny GPS++, Podzielenie danych na części - kaczakat - 16-02-2020 No to źle Cię zrozumiałem, myślałem że chcesz sobie drukować napisy czy tam pokazać na LCD. Jak to mają być liczby to możesz sobie pierwszą liczbę podzielić modulo przez 100 i przypisać do liczby całkowitej int. int i= 18.639749%100, zostanie przypisana liczba 18. Potem pierwszą liczbę mnożysz x100 i znowu dzielisz modulo przez 100, masz i=63, (18.63*100)%100 = 63, itd. Jak pierwsza liczba w części całkowitej może być większa niż 100 to podziel pierwszy raz modulo 1000, no ale jest że ma być liczba dwucyfrowa, tak że 100 jest OK. Dzielenie i mnożenie na pewno będzie szybsze niż zamiana na string, wyłowienie dwóch znaków i potem z powrotem zamiana na int. A po chwili zastanowienia łatwiej zacząć od tyłu: Kod: float zmiennaf=18.681232; RE: Tiny GPS++, Podzielenie danych na części - Osiasty - 17-02-2020 Wow dzięki za kod wstawiłem go w ten sposób Kod: float zmiennaf; Na wyjściu w monitorze otrzymałem. 72 97 33 50 11 1.7 50.339771 72 97 33 50 11 2.9 50.339767 68 97 33 50 11 1.7 50.339767 Jak widać jest małe przekłamanie w ostatnich 2 cyfrach ale na tyle małe że pomijalne teraz muszę pomyśleć jak te dane wyciągać do A,B,C,D. dane podkreślone to inne dane nie związane z tematem. RE: Tiny GPS++, Podzielenie danych na części - kaczakat - 17-02-2020 Jeśli używasz Arduino z AVR (Atmega) to jest tylko float, a float ma to do siebie, że to co ma na ostatnim miejscu znaczącym to jest trochę losowe. Jak masz jakiś inny uC to użyj zmiennej double, z AVR double jest dalej floatem. Ale sama biblioteka, nawet jeśli używa double z AVR i tak podaje Ci tylko przybliżone dane, choć GPS może np. podawać dokładniejszą pozycję zapisaną w postaci binarnej na XXbitach. W przypadku GPS może to mieć zresztą mniejsze znaczenie, i tak każdy pomiar lokalizacji to skakanie po mapie, GPS w aucie tylko zgaduje, że jedziemy po ulicy a nie po budynkach na mapie i podaje dane uśrednione. RE: Tiny GPS++, Podzielenie danych na części - Robson Kerman - 17-02-2020 Dane z gps mają postać (string) 12345678912. Biblioteka TinyGPS++ zamienia je na int, a następnie (nie wiem po co) na double: Kod: double TinyGPSLocation::lng() Otrzymujemy float 12.345678912, a kolega znowu zamienia je na int. Sensu nie widzę. Wywalić bibliotekę i pracować na czystych danych NMEA. Już gdzieś o tym pisałem na łamach naszego forum. RE: Tiny GPS++, Podzielenie danych na części - Osiasty - 18-02-2020 Patrzyłem na zawartość danych jakie wysyła mi moduł GPS i nie są prawidłowe Znaczy się to co dostaje w linijce $GNGGA,091609.00,5020.37459,N,01838.41470,E nijak ma się do wartości które dostaje z wykorzystaniem biblioteki które pokazują prawdziwe dane. Więc jak tu użyć czystych danych. Obecnie użyłem takiego kodu: Kod: float zmiennalat; Obecnie pod "lat" mam cyfrę 50339920.00 Wysyłając ją do urządzenia wyświetli pierwsze dwie cyfry a więc 50. Czy jest więc możliwość aby wyświetlić cyfry od trzeciej aby wyglądało to na: 339920.00 Wtedy wysyłając ją w drugą pozycję wyświetliło by 33 i znowu skasować 2 pierwsze cyfry wysłać itd. Może to jest sposób na mój problem. RE: Tiny GPS++, Podzielenie danych na części - Robson Kerman - 19-02-2020 Ta biblioteka nie czyta prefiksów Glonass Galileo tylko GPS, czyli szukaj $GPGGA. Najprostrze i najtańsze odbiorniki muszą wysyłać przynajmniej $GPRMC, ale w/w biblioteka już niestety tego nie obsługuje. Odpowiadając na pytanie: Tak jest możliwość. Najprościej to pomnożyć pierwsze dwie cyfry przez 1000000 i odjąć od 50339920.00 RE: Tiny GPS++, Podzielenie danych na części - Osiasty - 19-02-2020 Problem rozwiązany |