SerialPort wysyłanie int

0

Chcę wysłać liczbę powiedzmy: 0x45 przez serialport. Jak mogę to zrobić?

  SerialPort port = new SerialPort("COM12", 4800, Parity.None, 8, StopBits.One);
                        port.Open();
                        port.Write("a");
                        foreach (var item in lista)
                        {
                            port.Write(item);
                        }
                        port.Write("b");
                        port.Close();

w tym przypadku wywala mi, że potrzebuje stringa. Jest metoda Write(Byte[], Int32, Int32), ale jak jej użyć, nie mam pojęcia.

0

Wysyłasz przez port tablice bajtów czyli inta musisz rozbić na 4 bajty zapakować do tablicy i wysłać.
Metoda write przyjmuje jako pierwszy parametr tablice drugi to offset czyli domyślnie 0 a trzeci paramter to ilość bajtów do wysłania

0

Do wypowiedzi kolegi @kornik280 dodam że przy wysyłaniu musisz pamiętać o tym że urządzenie po drugiej stronie musi umieć rozkodować to co mu wysłałeś.
W przypadku inta to kwestia tylko little endian big endian.
Jednak jeżeli chcesz wysyłać bardziej złożone struktury danych a po drugiej stronie urządzenie jest mocne (a w dzisiejszych czasach większość jest) to może warto się pobawić się w bardziej zaawansowane techniki.

0

Stworzyłem coś takiego:

 SerialPort port = new SerialPort("COM12", 4800, Parity.None, 8, StopBits.One);
            port.Open();
            int item = 250;
            byte[] buffer = new byte[] { Convert.ToByte(item) };
            port.Write(buffer, 0, 1);
            port.Close();

Czy to ma racje bytu?
Wysyłam to na mikroprocesor, który steruje wyświetlaczem. Przy różnych wartościach zmiennej int, wyświetlacz wyrzuca mi 0 lub 128.. Funkcja na mikroprocesorze jest napisana na konwersję do int. Gdzie jest problem?

0

Wysyłasz tylko jeden bajt a w przypadku int to 4 bajty, ponadto użyj zmiennej bez znaku np uint

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