Skocz do zawartości
kkisiela1996

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

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

Udostępnij ten post


Link to post
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?

Udostępnij ten post


Link to post
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

Udostępnij ten post


Link to post
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?

Udostępnij ten post


Link to post
Share on other sites

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.

 

Udostępnij ten post


Link to post
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).

Udostępnij ten post


Link to post
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!

Gość
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...