komunikacja bluetooth

0

Witam.

Mam problem następującej treści.

Napisałem program do komunikacji bluetooth z urządzeniem zewnętrznym. Wszystko ładnie działa, jeśli łączę się z urządzeniem przez kabel, działa też, jeśli połączę się z urządzeniem za pomocą programu BrayTerminal, ale połączenie zaczyna się sypać, jeśli połączę się przez Bluetooth za pomocą mojego programu. Tutaj wrzucam kod:

public void send(char data) //funkcja wysyłająca komendy do hamowni
        {
            port.Write(data.ToString()); //wysłanie podanej komendy
            
            try
            {
                ODBIOR = port.ReadByte(); //oczekiwanie na potwierdzenie
                status_wys(Convert.ToString(ODBIOR)); //funkcja wyświetlająca to co jest w nawiasie
            }
            catch (TimeoutException) //jeśli nie otrzymał potwierdzenia
            {
                status_wys("Response timeout has expired.");
            }

            if (Convert.ToChar(ODBIOR) == UNKNOWN) //jeśli wysłana komenda była nieznana
            {
                status_wys("Command unknown.");
            }

            else if (Convert.ToChar(ODBIOR) == data)
            {
                status_wys("Sending succes.");
            }

            else //nie udało się wysłać komendy
            {
                status_wys("Sending has failed.");
            }

            
        }

Teraz krótkie wyjaśnienie sytuacji:
połączenie powinno działać tak, że urządzenie odsyła mi taką samą wartość, jaką ja wysłałem. Jeśli urządzenie nie rozpoznaje komendy to odsyła wartość UNKNOWN. I tutaj zaczyna się problem. Urządzenie odsyła mi zawsze poprawną wartość, ale mój program nie zawsze ją odczytuje dobrze. Najczęściej jest tak, że ta wartość jest odczytywana dobrze za trzecim razem. Sprawdzałem połączenie w BrayTerminal'u i tam wszystko działa dobrze.

Czy ktoś jest w stanie mi powiedzieć dlaczego tak się dzieje?

0

jakiego typu jest port
pokaz kod przyjmujacy po stronie urzadzenia

jaki widze problem to char wewnetrznie w .net trzymany jest w kodowaniu utf-16
przeksztalcasz do string i wysylasz, ale nie wysylasz jednego bajtu
wiec ReadByte nie do konca czyta to co zostalo wyslane i pewnie po stronie czytajacego jest podobny problem
najrozsadniej jest pisac-czytac do strumieni w ten sam sposob, tzn. albo sam przeksztalcasz wiadomosc do bajtow (uzywajac odpowiedniej strony kodowej - encoding) i wysylasz, a przy odczycie dekodujesz ja za pomoca tego samego encoding
lub uzywasz jakiegos stream, ktory robi to za ciebie i operujesz na stringach

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