#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' то продолжаем. Нет - отбрасываем, начинаем сначала.
Комментариев нет:
Отправить комментарий