Страницы

Поиск по вопросам

четверг, 23 января 2020 г.

Чтение данных с arduino uno через COM порт

#c_sharp #arduino


Доброе время суток! Возникла проблема: код на arduino нормально работает, во встроенном
мониторе порта данные правильно отображаются. Но в приложении на C#, особенно очень
часто в самом начале приходит непонятных мусор вместо значений.
Типичные значения во встроенном мониторе:


  145
  
  0
  
  145
  
  0


Значения в программе на C#:


  SSH(??j - откуда берутся эти строки?
  
  145
  
  143
  
  ??j


Код программы

public partial class MainWindow : Window
{
    SerialPort sp = new SerialPort("COM3", 115200, Parity.None, 8, StopBits.One);

    public MainWindow()
    {
        InitializeComponent();

        sp.DataReceived += new SerialDataReceivedEventHandler(OnDataReceived);
        sp.Open();
    }

    private void OnDataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        Dispatcher.BeginInvoke(new Action(delegate()
            {
                this.console.Text += sp.ReadExisting();
            }));

    }

    private void ReadPort(object source, ElapsedEventArgs e)
    {

    }

    private void readButton_Click(object sender, RoutedEventArgs e)
    {

    }
}


}
    


Ответы

Ответ 1



Много работал с компортом и ардуиной. Тагер(для лезертага) делал и прочее. Как я понял мусор в компорте - это вообще норма. Собственно для этого и существуют различные протоколы передачи данных. В простейшем случае, ты должен сначала слать идентификатор начала данных. Это может быть что угодно. Допустим [StartData]. Следом шлешь данные. А после идентификатор конца данных. [StopData]. Не плохо бы еще прикрутить контрольную сумму(гугли по CRC) и длину данных. Тогда в с# ты будешь сначала искать в потоке компорта идентификатор начала пакета. Потом читать ответ до идентификатора конца пакета. Реализовывать чтение можно по-байтово. Считываем байт - если равен '[', то читаем дальше, если следующий 'S' то продолжаем. Нет - отбрасываем, начинаем сначала.

Комментариев нет:

Отправить комментарий