从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");
}
一些注意事项:
- RtsEnable 和 DtrEnable 都处于活动状态
- 波特率 (Arduino/C#) = 1200
波特率值有问题吗?我必须使用此值,但我不确定 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");
}