Skocz do zawartości

Problem z konfiguracją systemu satelitarnego moduł Grove AIR530


Pomocna odpowiedź

Nie wiem czy Cię to ratuje, ale jeśli chcesz zmienić system raz to może spruboj przez ucenter...to taka apka/kombajn do ustawiania parametrów gps'ow...tylko nie wiem czy z twoim modelem zadziała...

Nie wiem jak zakometowywałeś i odkometowywałeś linie w swoim kodzie. Co się dzieje jak użyjesz tego:

#include <SoftwareSerial.h>

SoftwareSerial Grove(2, 3);
char buffer_grove[64]; // Bufor do komunikacji z Grove
int count_grove = 0; 
char buffer_serial[64]; // bufor do komunikacji z PC
int count_serial = 0;


void setup() {
    Grove.begin(9600);   
    Serial.begin(9600);
}

void loop() {
    if (Serial.available()>0)  { //Najpierw sprawdzamy czy jest coś do wysłania do Grove
      while (Serial.available()) {
            buffer_serial[count_serial++] = Serial.read(); //wczytujemy do bufora
            if (count_serial == 64) break;
      }
      Serial.write(buffer_serial, count_serial); // odbijamy do PC
      Grove.write(buffer_serial, count_serial);  // wysyłamy do Grove
      count_serial = 0;
    } else if (Grove.available()) {  // używamy else'a just in case - robimy debug i nie chce aby write do PC z Grove i odbicia się przeplatały
        while (Grove.available()) {              // reading data into char array
            buffer_grove[count_grove++] = Grove.read();      // writing data into array
            if (count_grove == 64) break;
        }
        Serial.write(buffer_grove, count_grove);                 // if no data transmission ends, write buffer to hardware serial port
        count_grove = 0;
    }
}

 

Jak patrzę na to wszystko jeszcze raz, to wydajje się niemożliwe, by błędy w środku jednego, jedynego komunikatu były spowodowane błędami transmisji. Początek i koniec wydają się być w porządku; wszystkie inne komunikaty też są wyświetlane prawidłowo.

Błędy ma tylko komunikat $BDGSV (zawierający informacje o położeniu satelitów systemu  BeiDou) a jednocześnie analogiczny komunikat z systemu GPS ($GPGSV - linijka wcześniej) jest przesyłany prawidłowo.

Albo Chińczycy szykują się do wojny i fałszują dane, albo moduł  nie daje sobie rady z systemem BeiDou.
.
 

4 minuty temu, jand napisał:

Jak patrzę na to wszystko jeszcze raz, to wydajje się niemożliwe, by błędy w środku jednego, jedynego komunikatu były spowodowane błędami transmisji.

Przeczytaj to:

Dnia 14.12.2021 o 16:54, aeser napisał:

aczkolwiek, wysyłanie ich przez monitor portu szeregowego nie daje zadnego efektu, tzn. pokazują sie jakieś kwiatki w monitorze

i obejrzyj to:

if (Serial.available()>0)  {               // if data is available on hardware serial port ==> data is coming from PC or notebook
      Grove.write(Serial.read());        // write it to the SoftSerial shield
  //  Serial.print(Serial.read());         //sluzy do odbicia komendy wyslanej 
  //  Serial.write(Serial.read());
    }

Ja nie wiem co było odkomentowane, a co zakomentowane jak krzaki się pojawiają. Dlatego podesłałem swoją wersję...

4 minuty temu, pmochocki napisał:

kwiatki w monitorze

pojawiają się tylko w środku jednej jedynej linijki (początek i koniec są w porządku) - wszystkie inne komunikaty są OK. Zakładam (musi to oczywiście potwierdzić @aeser), że wszystkie komunikaty, widoczne na załączonym obrazie konsoli, były wykonane przy użyciu tej samej wersji programu.

Przeczytaj to:

6 godzin temu, aeser napisał:

@pmochocki  Krzaki są zwracane ponieważ specjalnie utworzyłem formułę która bedzie mi odbijać to co wysyłam 

Jezeli bym ja usunał to by nic nie było widac

Wiec:

17 minut temu, jand napisał:
28 minut temu, pmochocki napisał:

kwiatki w monitorze

pojawiają się tylko w środku jednej jedynej linijki (początek i koniec są w porządku) - wszystkie inne komunikaty są OK.

No bo w środku komunikatu kolega wysłał coś po serialu i użył którejś z zakomentowanej linii:

if (Serial.available()>0)  {               // if data is available on hardware serial port ==> data is coming from PC or notebook
      Grove.write(Serial.read());        // write it to the SoftSerial shield
  //  Serial.print(Serial.read());         //sluzy do odbicia komendy wyslanej 
  //  Serial.write(Serial.read());
    }

 

4 minuty temu, jand napisał:

W takim razie krzaczki powinny to się pojawiać w każdym komunikacie (linii).

Nie wiem na jakiej podstawie tak twierdzisz. Możesz to rozwinąć?

Autor wątku napisał, że krzaczki pojawiają się jak próbuje wysłać komendę. Więc nie będzie ich w każdym komunikacie. Poprostu moduł gps wysyła komunikaty i w losowym momencie autor wysyła komendę. I wtedy za pomocą którejś, bo autor nie sprecyzował której, zakomentowanej linii wysyła tą komendę z powrotem jako echo, ale zamiast tego pojawiają mu się krzaczki. Dlaczego w takim razie krzaczki miałby być w każdym komunikacie nadawanym przez moduł GPS?

  • Lubię! 1
52 minuty temu, pmochocki napisał:

Możesz to rozwinąć?

Może rzeczywiście do końca tego nie przemyśłem.

Ale i tak dla mnie nie jest jasne dlaczego to są krzaczki, a nie mieszanina znaków (czytelnych) pochodzacych z dwóch różnych strumieni danych (dane z GPS i echo konsoli).  Przecież UART nie przerywa w połowie wysyłania znaku, aby zająć się innym, pochodzącym z drugiego strumienia.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...