从Arduino / C#应用程序读取和发送串行数据

本文关键字:数据 读取 Arduino 应用程序 | 更新日期: 2023-09-27 18:31:06

我有一个程序,允许多个Arduino通过串行端口进行通信。例如,如果Arduino1想要与Arduino3通信,则用户从Arduino1发送一个字符串,该字符串出现在Arduino3上,依此类推。这对SerialMonitor很有效。

问题是当我尝试在我的 C# 应用程序中执行相同的操作时(没有任何内容出现)。我试过这个:

//(...)
comPort1.Open();
//(...)
private void comPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    string inData = comPort1.ReadLine();
    msgBoxLog.AppendText(inData); // msgBoxLog = textBox with data received/sent
}
//(...)
private void sendButton_Click(object sender, EventArgs e)
{
    string my_str = "my string";
    msgBoxLog.AppendText(my_str + "'r'n");
    comPort1.WriteLine(my_str + "'r'n");
}

一些注意事项:

  • RtsEnableDtrEnable 都处于活动状态
  • 波特率 (Arduino/C#) = 1200

波特率值有问题吗?我必须使用此值,但我不确定 C# 是否接受它。我也尝试过这样的事情,但没有成功。

从Arduino / C#应用程序读取和发送串行数据

我对无法通过dataReceived事件访问UI控件有一个模糊的记忆。试试这个。

private void comPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    string inData = comPort1.ReadLine();
    this.Invoke(new EventHandler(processData));
}
private void processData(object sender, EventArgs e)
{
    msgBoxLog.AppendText(inData);
}

您是否启用了正确的事件处理程序,如本例所示?

mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived.aspx

附言我在软件中使用了"哑"延迟,在写入和读取串行端口之间,并且工作正常。喜欢这个:

serialPort1.Write(Data, 0, Data.Length);
System.Threading.Thread.Sleep(500);
try
{
    serialPort1.Read(Data2, 0, Data2.Length);
}
catch (TimeoutException)
{
    errorProvider1.SetError(maskedTextBox1, "timeout");
}
catch (ArgumentNullException)
{
    errorProvider1.SetError(maskedTextBox1, "no answer");
}