Ostatnio zacząłem zabawę z tym bluetoothem, a trochę wcześniej z RS232. Takie krzaki wynikają z niedopasowania szybkości transmisji nadajnika i odbiornika.
Dla przykładu:
Do mikrokontrolera na linie TX i RX mam podłączoną przejściówkę RS232-usb i bluetooth, USB mam ustawione 57600bps a na bluetooth 9600bps (ustawiasz to sobie w menadżerze urządzeń, chociaż możliwe, że wystarczy z poziomu programu). Mam otwarte dwie konsole np.putty do odbierania sygnału z przejściówki i bluetootha.
W mikrokontrolerze inicjuje rs232 na 57600bps i wysyłam odczyty z żyroskopów, a więc z dużą szybkością. Efektem jest to, że w konsoli USB mam poprawne dane, a bluetootha krzaczki i chińskie znaczki. Odwrotna sytuacja jest przy ustawieniu w mikrokontrolerze rs232 na 9600bps.
Dodatkowo szybkość bluetootha ustawiasz za pomocą wysłania do niego komendy "AT+BAUD4"(4-9600, 7-57600, może to być różne dla różnych producentów), możesz to zrobić podłączając usb-rs232 do bluetootha, nie wolno w tym czasie łączyć się bezprzewodowo z komputerem, używając programu Realterm albo konsoli arduino. W internecie znalazłem że komendy należy kończyć znakami powrotu karetki i entera, ale w moim przypadku trzeba było wysłać bez tych znaków, bo moduł nie reagował na nie. Robisz to tylko raz a potem moduł to pamięta nawet po wyłączeniu prądu. Ustawiając to z poziomu mikrokontrolera prawdopodobnie musisz robić odstępy czasowe pomiędzy kolejnymi znakami.
Dla modułu HC-05 trzeba zewrzeć pin KEY do 3.3V (wtedy reaguje na komendy AT), a dla modułu HC-06 nie trzeba. HC-05 ma tryb master-slave, a HC-06 tylko slave. HC-05 ma zasięg 10m a HC-06 ma zasięg 100m.
Podsumowując, poszukaj dla której prędkości transmisji działa ci przesyłanie danych, albo sam ustaw szybkość w bluetooth i konsoli na taką samą.
Mam nadzieję, że się nie pomyliłem za bardzo
------------------------ [ Dodano po: 34 minutach ]Tak wyglądają odczyty dla usb-rs232 i bluetooth-a:
Czy mógłby mnie ktoś odesłać do wątku w jaki sposób przerobić liczby zmiennoprzecinkowe na HEXa przed wysłaniem?
Mam wartość float a= -0,49522 mnożę ją razy 10^5 uzyskuje a = -49522 używam itoa((int)a,tmp,16) i dostaję wartość gotową do wysłania?