Skocz do zawartości

Połączenie bluetooth pomiędzy arduino, a ZumoU32


Pomocna odpowiedź

Napisano

Cześć. Mam problem w komunikacji między płytką arduino, a robotem. Kierownica komputerowa za pomocą, której sterowany jest robot jest  podłączona do płytki arduino. Do komunikacji używam modułu HC-05. Podczas próby wysłania komendy do robota są straszne opóźnienia (na oko jakieś 5-6 sekund). Jest na to jakiś sposób ?

Dodam, że podczas przesyłania komend z telefonu do robota nie mam opóźnień.

@kkisiela1996 witam na forum!

Widzę, że to Twoje pierwsze kroki na Forbocie 🙂 Polecam, abyś zapoznał się z naszą Polityką Przyjaznego Forum. Znajdziesz tam wskazówki co do sposobu zadawania pytań. W tej chwili ciężko Ci pomóc, ponieważ nie opisałeś dokładnie Twojej sytuacji. Chętnie pomożemy w znalezieniu rozwiązania, ale musisz podać trochę więcej szczegółów. Jakiego programu używasz do sterowania, jak wygląda program wgrany na robota itd. To jakiś gotowiec czy Twój kod?

(edytowany)

Cześć @Treker,

Postaram się bardziej szczegółowo opisać moją sytuację.

Jeżeli chodzi o kod to nic specjalnego. Chciałem przetestować przesył danych przy pomocy metody write(po stronie kierownicy) i metody read po stronie robota. Wyniki wyświetlam na monitorze portu szeregowego(po stronie robota). Widać tam z jakimi opóźnieniami odbieram dane.

Środowisko, z którego korzystam do programowania arduino i robota to ArduinoIDE.

 

Kod dla arduino z kierownicą wygląda tak (pisany  na szybko tylko po to aby przetestować wysyłanie danych) :

int kierownica;
int przod;
int tyl;

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

  kierownica = 0;
  przod = 0;
  tyl = 0;
}

void loop() {

  kierownica  = analogRead(A0);
  przod = analogRead(A2);
  tyl = analogRead(A1);

  String str1 = String(kierownica);
  String str3 = String(tyl);
  String str2 = String(przod);

  String str = str1+" "+str2+" "+str3+'\n';

  
  char* buf = (char*) malloc(sizeof(char)*str.length()+1);
  str.toCharArray(buf, str.length()+1);
  Serial.write(buf);
  free(buf);
}

Małe objaśnienie :

Zmienna 'kierownica' ma wartości z obrotu kierownicą, zmienna 'przod' i 'tyl' to odpowiednio wartości z pedału gazu i hamulca(który tutaj miałby pełnić funkcje jazdy tyłem)

Te 3 wartości zapisuje do zmiennej typu String. Potem jak widać jest zamieniam tego Stringa na tablice char (w innej formie blokowało mnie środowisko).

 

Po stronie robota to jeszcze prostszy kod. Wygląda tak:

String str= "";

void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);

}

void loop() {
  if(Serial1.available())
  {
    char c = Serial1.read();
    if(c!='\n')
    {
      str+=c;
    }
    else
    {
      Serial.println(str);
      str="";
    }
  }
}

 

Pobieram komendę znak po znaku i jak natrafię na koniec linii to wyświetlam wynik w monitorze portu szeregowego.

Jak widać póki co nie steruje nim w żaden sposób bo na starcie chciałem właśnie zobaczyć czy będą jakieś opóźnienia i niestety je mam. Dodatkowo napisałem aplikację na telefon pod system android, która też przez bluetooth łączy się z robotem (tutaj już mam interfejs, który pozawala na sterowanie) i opóźnień praktycznie nie ma.

 

Edytowano przez kkisiela1996

Czy próbowałeś ograniczyć ilość danych wysyłanych z "kierownicy"? Próba wysyłania danych w każdym obiegu pętli może przysporzyć sporo problemów. Jak często realnie potrzebujesz wysłać ramkę z nowymi danymi?

Gdy tylko zmieni się wartość po stronie kierownicy to należy wysłać nowe wartości do robota. Może rzeczywiście spróbuje ograniczyć wysyłanie danych za pomocą warunków. Sprawdzałbym czy co najmniej jedna wartość się zmieniła i jeżeli tak by było to wtedy dopiero dane są wysyłane.

 

To po pierwsze, a po drugie może nawet nie przy każdej zmianie wartości po stronie kierownicy potrzebna jest aktualizacja, może warto dodać jakieś małe "odstępy"? Oprócz tego warto na koniec przeliczyć czy ustawiona prędkość transmisji jest wystarczające dla tego scenariusza (ilość danych + częstotliwość ich wysyłania).

  • 4 tygodnie później...

Świetnie, że udało się rozwiązać problem i wszystko już działa! W takim razie powodzenia przy dalszych eksperymentach 🚀

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...