dane z serial port - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: dane z serial port (/watek-dane-z-serial-port) |
dane z serial port - tabulek - 30-11-2019 Witam wiem że to pewnie banalne ale chciałem zapytać jak wydobyć konkretną informację z komunikatu NMEA(GPS). czyli z tego : $GPVTG,,T,,M,0.859,N,1.591,K,A*2B $GPGGA,123201.20,5107.94277,N,01706.05690,E,1,07,1.31,165.4,M,40.4,M,,*59 $GPGSA,A,3,16,30,05,09,02,23,07,,,,,,3.41,1.31,3.15*0C $GPGSV,3,1,11,02,31,263,26,04,39,083,21,05,28,306,20,06,21,217,10*76 $GPGSV,3,2,11,07,71,167,16,09,56,083,17,16,18,040,23,23,28,088,19*71 $GPGSV,3,3,11,26,02,021,,29,03,327,08,30,40,205,17*4C $GPGLL,5107.94277,N,01706.05690,E,123201.20,A,A*6E $GPRMC,123201.40,A,5107.94266,N,01706.05687,E,0.660,,301119,,,A*7C chciałbym wydobyć w linijce GPVTG, prędkość, czyli 1.591 i przesłać do innej zmiennej. w tej chwili prosty kod do odczytu: #include <SoftwareSerial.h> SoftwareSerial gpsBoard (2, 3, false); void setup() { Serial.begin(115200); gpsBoard.begin(9600); } void loop() { while (gpsBoard.available()) { byte c = gpsBoard.read(); // Read the GPS data Serial.print((char)c); } } i teraz jak ze zmiennej c wydobyć to co mnie interesuje. Pozdrawiam Serdecznie RE: dane z serial port - error105 - 30-11-2019 (30-11-2019, 14:35)tabulek napisał(a): Witam wiem że to pewnie banalne ale chciałem zapytać jak wydobyć konkretną informację z komunikatu NMEA(GPS). Poszukaj pod "extract text string between two different delimiters" RE: dane z serial port - Robson Kerman - 30-11-2019 Gdybyś chciał na stringach, to można to łatwo zrobić w ten sposób: Kod: #include <SoftwareSerial.h> Speed jest stringiem, ale możesz go łatwo zamienić na ciąg cyfr. RE: dane z serial port - elvis - 30-11-2019 Te dane wyglądają po prostu na NMEA, więc proponuję wpisać w google "Arduino NMEA parser". Pierwszy lepszy wynik: https://github.com/stevemarple/MicroNMEA RE: dane z serial port - Robson Kerman - 30-11-2019 No kolega tabulek napisał, że to są dane NMEA. Zapytał też: " jak ze zmiennej c wydobyć to co mnie interesuje." Mój kod do "wydobycia" tego ma osiem linii kodu i robi dokładnie to, co autor miał na myśli. Twój kod ma w sumie 540 linii kodu i robi pierdyliard różnych, niepotrzebnych, dla autowa wątku, rzeczy. Mój kod: DATA: 325 bytes PROGRAM: 5368 bytes Twój kod: DATA: 806 bytes PROGRAM: 9470 bytes RE: dane z serial port - elvis - 30-11-2019 To nie jest mój kod, ja kiedyś parser NMEA pisałem, ale nie pamiętam ile zajmował pamięci. Chodziło mi tylko o to żeby nie wymyślać od nowa koła i użyć biblioteki - a to co podlinkowałem to był pierwszy przykład. Ogólnie do NMEA jest sporo gotowców, a nawet jeśli nic nie pasuje to można w bibliotece podpatrzeć rozwiązanie i zrobić własne, jeszcze lepsze. dane z serial port - Robson Kerman - 30-11-2019 Ja też myślałem żeby podlinkować jakąś bibliotekę, ale to jest tak proste zadanie, że szybciej mi się kod napisał niż Google szukał. A dotego wiadomo, że nim prostsze rozwiązanie tym lepiej. Wysłane z mojego LDN-L21 przy użyciu Tapatalka RE: dane z serial port - tabulek - 30-11-2019 (30-11-2019, 22:53)Robson Kerman napisał(a): Ja też myślałem żeby podlinkować jakąś bibliotekę, ale to jest tak proste zadanie, że szybciej mi się kod napisał niż Google szukał. A dotego wiadomo, że nim prostsze rozwiązanie tym lepiej.Dziękuję Ci serdecznie, o to mi chodziło, biblioteki znam ale tyle zbędnego kodu tak mozolnie działa że odświeżanie prędkości to tragedia, a chcę mieć szybko i dokładnie RE: dane z serial port - tabulek - 01-12-2019 nic nie wyświetla, nie moge znaleźć co jest nie tak ;d RE: dane z serial port - Robson Kerman - 01-12-2019 W normalnej sytuacji napisał bym: debuguj. Ale programowanie Arduino nie stwarza normalnych sytuacji, więc najlepszym sposobem jest wypisanie zmiennych na serial w istotnych miejscach programu. Ale zanim zaczniemy, to powinieneś sprawdzić, czy przepisałeś mój kod dokładnie, bo jeśli tak, to tam jest błąd. Jest: Kod: while (gpsBoard.available()) { Powinno być: Kod: while (gpsBoard.available()) { |