gpt4 book ai didi

c# - 在 C# 中检测 Arduino 端口

转载 作者:太空宇宙 更新时间:2023-11-03 11:08:41 25 4
gpt4 key购买 nike

我试图打开每个端口并发送 <mccon>串行,我的微 Controller 将对此做出响应 <connected>\n之后 C# 代码必须退出 for each 循环。

我在 serialPort.PortName = str; 遇到问题线。两次迭代后,不再继续。

我也尝试手动执行此操作。我做了一个下拉列表,一个一个地选择了端口。第二个端口后,不允许更改串口。但如果我在两次尝试中选择,它就可以正常工作。

我了解 C++ 中的 OOP。但我是 C# 的新手。我不确定循环失败的原因。

public Form1()
{
InitializeComponent();
send_button.Enabled = false;

//Availabe COM ports
SerialPort tmp;
foreach(string str in SerialPort.GetPortNames())
{
tmp = new SerialPort(str);
if (tmp.IsOpen == false)
{
serialPort.PortName = str;

try
{
//Open serial port
serialPort.Open();
serialPort.BaudRate = 9600;
serialPort.WriteTimeout = 10;
serialPort.ReadTimeout = 10;
serialPort.Write("<mccon>");
readtxt.Text = serialPort.ReadTo("\n");
if (readtxt.Text == "<connected>")
{
send_button.Enabled = true;
port_combobox.Enabled = false;
break;
}
else
{
serialPort.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}

最佳答案

我没有多个串口,但是当我编译和执行你的代码时,我注意到如果在读取过程中出错,你没有关闭串口。我建议你修改你的代码如下:

        SerialPort tmp;
foreach (string str in SerialPort.GetPortNames())
{
tmp = new SerialPort(str);
if (tmp.IsOpen == false)
{

serialPort.PortName = str;

try
{
//open serial port
serialPort.Open();
serialPort.BaudRate = 9600;
serialPort.WriteTimeout = 10;
serialPort.ReadTimeout = 10;
serialPort.Write("<mccon>");
String s = serialPort.ReadTo("\n");
if (s == "<connected>")
{
break;
}
else
{
serialPort.Close();
}
}
catch (TimeoutException)
{
serialPort.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}

我不确定在端口打开时更改端口名称会产生什么影响,但它很可能会导致您看到的问题。

关于c# - 在 C# 中检测 Arduino 端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14856440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com