Skocz do zawartości

Połączenie dwóch arduino za pomocą modułu Bluetooth HC-05, problem z wysyłaniem danych


Motororo

Pomocna odpowiedź

Zapewne programiści mnie skrytykują, ale podpowiem jak to zrobić łatwo. Zakładam, że wysyłanie jednej zmiennej działa. Teraz jak masz 5 czujników to do odczytu z drugiego dodaj 2000, do odczytu trzeciego dodaj 3000, do odczytu czwartego dodaj 4000, a do piątego 5000 i wysyłaj zmienną. Po odbiorze sprawdzasz instrukcją warunkową w jakim zakresie jest odebrana wartość Jeśli między 3000 a 3999 to ustawiasz serwo nr 3 na pozycję: zmienna-3000. Jeśli zmienna jest w zakresie między 5000 a 5999 to ustawiasz serwo nr 5 w pozycji: zmienna-5000.

  • Lubię! 2
Link do komentarza
Share on other sites

8 minut temu, matural napisał:

 Zakładam, że wysyłanie jednej zmiennej działa.

Dziala...i twoj sposob prosty i fajny, tylko ze tu odczytuje pojedyncze bajty...w sensie zmienna typu bajt..wiec autor musi przeczytac o "Serial.parseInt()" czy jakos tak...ja z tego akurat nie korzystalem, ale w polaczeniu z twoja metoda jak znalazl😉

  • Lubię! 1
Link do komentarza
Share on other sites

(edytowany)
12 minut temu, farmaceuta napisał:

w sensie zmienna typu bajt..wiec autor musi przeczytac o "Serial.parseInt()" czy jakos tak...ja z tego akurat nie korzystalem, ale w polaczeniu z twoja metoda jak znalazl😉

Albo odczytywać 2 bajty i liczyć je jako XX(base-256) po czym przekonwertować to na base-10, co jest bardzo proste... 

uint16_t readValue()
{
	uint8_t b0 = Serial.read();
	uint8_t b1 = Serial.read();
	return ((uint16_t)b0) * 256 + b1;
} // Pisane na kolanie, mogą być błędy

Tylko to wymaga przesyłania danych binarnie 😉 

EDIT:

Osoby ceniące RAM mogą pozbyć się zmiennych b0 i b1 i podmienić za nie ich wartości (wywołania metody Serial.read());

Edytowano przez H1M4W4R1
  • Lubię! 1
Link do komentarza
Share on other sites

To może tak zamienić String na int:

String dane="5520";
 int liczba;
 liczba=int((znak[0]-48)*1000);
 liczba+=int(znak[1]-48)*100;
 liczba+=int(znak[2]-48)*10;
 liczba+=int(znak[3]-48);

48 to chyba wiadomo ASCI

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

(edytowany)
5 minut temu, matural napisał:

To może tak zamienić String na int:




String dane="5520";
 int liczba;
 liczba=int((znak[0]-48)*1000);
 liczba+=int(znak[1]-48)*100;
 liczba+=int(znak[2]-48)*10;
 liczba+=int(znak[3]-48);

48 to chyba wiadomo ASCI

Syntax Error 😉 Zamiast 48 wolę używać '0', łatwiejsze do ogarnięcia 😉 Poza tym wykonujesz sporo operacji... Raczej wolałbym przesyłać dane binarnie i je parsować w mój sposób (algorytm jest wydajniejszy)...

Ale ogólnie Twoja logika też zadziała, tylko ma wadę kiedy liczba to będzie np. "125" 😉 

Edytowano przez H1M4W4R1
  • Lubię! 1
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.