2013-09-13 3 views
0

У меня есть два Arduinos, которые позволяют обмен сообщениями через последовательный порт с помощью Serial Monitor.Не отправлять Серийные данные в приложении C#

Если я использую Serial Monitor с обеих сторон, все работает нормально. Если я использую свое приложение C#, ничего не происходит. Я попытался отправить из Serial Monitor для C# App, и он работает, но не наоборот.

// ... 
comPort1.Open(); 
// ... 
private void comPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) 
{ 
    this.Invoke(new EventHandler(processData)); 
} 
private void processData(object sender, EventArgs e) 
{ 
    string inData = comPort1.ReadExisting(); 
    msgBoxLog.AppendText(inData); 
} 
// ... 
private void sendButton_Click(object sender, EventArgs e) 
{ 
    string my_str = "my string"; 
    msgBoxLog.AppendText(msgBox.Text + my_str); 
    comPort1.Write(msgBox.Text); 
} 

RtsEnable и DtrEnable оба Enabled

+0

Мне повезло с использованием события DataReceived во встроенных библиотеках последовательных портов. Похоже, что это багги и пропуски данных довольно часто. Мне всегда приходилось прибегать к использованию метода опроса (используя таймер или жесткий цикл в отдельном потоке) или сторонних библиотек. –

+0

Почему вы используете EventHandler? почему вы прямо не пишете строку inData = comPort1.ReadExisting(); msgBoxLog.AppendText (inData); Внутри comPort1_DataReceived() –

+0

@MehrdadKamelzadeh Это не сработает. Мне нужно сделать потокобезопасные вызовы в Windows Forms Controls или я получу 'InvalidOperationException' – mafap

ответ

0

Ну, с Console.Write(msgBox.Text); я понял, что это была просто глупая проблема, я не посылал msgBox.Text, как я хотел. Это должно быть:

private void sendButton_Click(object sender, EventArgs e) 
{ 
    string my_str = "my string"; 
    comPort1.Write(msgBox.Text); //Console.Write(msgBox.Text); 
    msgBoxLog.AppendText(msgBox.Text + my_str); 
} 
Смежные вопросы