Полученные данные от SerialPort> 0x7F отображаются как 0x3F - PullRequest
0 голосов
/ 08 июня 2018

Я хочу отправить случайно сгенерированные данные с моего ПК на микроконтроллер (ATmega328p), а затем отразить их обратно.Для этого я написал программу на C # (я впервые работал с ней).

Каждый байт, который получает ПК, возвращается, а> 0xF7 отображается как 0x3F.

Микроконтроллер получает и отправляетданные возвращаются правильно (я отображаю все данные, которые микроконтроллер получает и отправляет на ЖК-дисплее).Я также использовал два последовательных терминальных инструмента (HTerm, Pololu Serial Transmitter), чтобы убедиться, что µC работает нормально.Должно быть что-то не так, когда ПК получает / отображает данные в конце.

Отображать полученные данные в виде .hex в textBox1

  private  void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e){

        SerialPort sp = (SerialPort)sender;
        string indata = sp.ReadExisting();
        string outp = string.Empty;
        char[] value = indata.ToCharArray();
        foreach(char L in value){
        int V = Convert.ToInt32(L);
        outp+= string.Format("{0:x}",V);
        }

        if (outp != String.Empty)
            Invoke(new Action(() => textBox1.AppendText(outp)));
    }

Edit2 //

Я исправил проблему.Спасибо kunif и gunnerone за подсказки!Кажется, есть проблема с кодировкой port.ReadExisting ().Вместо этого я знаю, использовать порт.Read ().

private  void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e){

        int bytesToRead = port.BytesToRead;
        byte[] value = new byte[bytesToRead];
        port.Read(value,0,bytesToRead);
        string indata = BitConverter.ToString(value);
        if (indata != String.Empty)
            Invoke(new Action(() => textBox1.AppendText(indata)));
    }

1 Ответ

0 голосов
/ 09 июня 2018

Как и в этой статье ASCIIEncoding.ASCII.GetBytes () Возвращая неожиданное значение , кажется, что обработка, аналогичная Encoding.ASCII.GetBytes () или ASCIIEncoding.ASCII.GetBytes (), выполняется где-то (можетbe indata.ToCharArray ()).

Пожалуйста, попробуйте изменить значение с char[] value = indata.ToCharArray(); на byte[] value = Encoding.GetEncoding("ISO-8859-1").GetBytes(indata);, также измените другой символ [] на байт [].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...