Skocz do zawartości

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


kkisiela1996

Pomocna odpowiedź

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

Link do komentarza
Share on other sites

@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?

Link do komentarza
Share on other sites

(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
Link do komentarza
Share on other sites

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?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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.

 

Link do komentarza
Share on other sites

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

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.