komunikacja przez bluetooth

0

Witam.

Mam problem z komunikacją komputera z urządzeniem docelowym przez bluetooth.

Komunikacja powinna wyglądać tak, że urządzenie odsyła do komputera taką samą wartość, jaką komputer wysłał do urządzenia. Po napisaniu prostej aplikacji mam taki wynik:

bluetoothq.jpg

Jak widać, po otwarciu portu są wysyłane jakieś śmieci. Następnie dopiero po kilkukrotnym wysłaniu jednej wartości odpowiedź jest prawidłowa. Wygląda na to, że od strony urządzenia wszystko jest w porządku, bo sprawdziliśmy to oscyloskopem.

Na tym screenie wysyłana jest komenda łączenia z urządzeniem:
tek0006.png

i po otrzymaniu przez komputer odpowiedzi połączenie nie zostaje nawiązane. Z komputera wychodzi prawidłowa wartość, bo urządzenie dobrze ją interpretuje, z urządzenia także wychodzi prawidłowa wartość, co widać na oscyloskopie, natomiast komputer jakby nie potrafił jej dobrze zinterpretować. Załączam kod z aplikacji:

private void button2_Click(object sender, EventArgs e) //wysyłanie wartości z textbox'a
        {
            if (serialPort1.IsOpen == true)
            {
                serialPort1.Write(textBox1.Text.ToString());
                
                
            }
        }

        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) //oczekiwanie na odpowiedź
        {
            odbior = serialPort1.ReadByte();
            listBox1.Items.Add("Wyslano: "+ textBox1.Text.ToString()+" Odebrano: "+Convert.ToChar(odbior).ToString());
        }

Dodatkowo, jeśli łączę się z urządzeniem po kablu przez USB wszystko jest ok, cała komunikacja działa bezproblemowo. Problemy się zaczynają, jeśli chcę nawiązać połączenie przez bluetooth.

Moje pytanie w tym momencie brzmi, dlaczego tak się dzieje i co mogę zrobić, żeby komunikacja działała dobrze?

0

Przy komunikacji z portem radziłbym działać na tablicach bajtów, tzn uzywać metody

Write(byte[] buffer, int offset, int count) 

zamiast

Write(string) 

To samo z odbieraniem, nie kovertować do char'a, a później do stringa, tylko wyświetlać liczbowo (lub pakować do tablicy, wtedy będziesz mógł podglądnąć w debuggerze). Wtedy od razu widać co leci do i z portu, a znaki zawsze mozesz sprawdzić w tabeli ASCII. Jakiego typu jest zmienna 'odbior'? Spróbuj może jeszcze zobaczyć czy na dzień dobry port nie wysyła śmieci, i po każdej komendzie odczytaj do końca to co wysyła port, może na jedną komendę wysyła ci więcej niż jeden bajt i dlatego ci się nie zgadza.
A tak w ogóle to z tego co wiem podczas komunikacji przez bluetooth zakłócenia to norma, więc może spróbować wymyślić jakiś prosty protokół, dzięki któremu będziesz wiedział czy otrzymywane dane są poprawne.

0

poczytaj jeszcze o Encoding i przed wyslaniem i po wyslaniu uzywaj tego samego Encoding
pamietaj ze nie wszystkie encoding uzywaja jednego bajtu na przechowanie znaku, wiec dla takich Encoding ReadByte jest bezsensu
uzywaj jak sugeruje adams85 Read/Write przy uzyciu buforow byte

1 użytkowników online, w tym zalogowanych: 0, gości: 1