我正在使用Arduino Board在串行COM端口上写入,并使用C#应用程序来读取它。但每当我尝试运行C#程序时,尝试打开串行端口时会发生异常(UnauthorizedAccessException)。如何正确打开串口?
我对C ++知之甚少。我的大部分知识来自他们与C ++的相似之处,以及大量的谷歌搜索教程。以下是我从其中一个教程中复制的代码之一:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
if(!serialPort1.IsOpen)
{
serialPort1.PortName = "COM3";
serialPort1.Open();
richTextBox1.Text = "opened";
}
}
private void button1_Click(object sender, EventArgs e)
{
if(serialPort1.IsOpen)
{
string text = richTextBox1.Text;
serialPort1.WriteLine(text);
}
}
}
答案 0 :(得分:1)
发生的事情是您已在其他应用程序中打开COM3(请参阅MSDN)。当您单击button1时,程序可以看到COM端口已打开(在另一个应用程序中)并尝试写入,即使您的程序无法访问它。
首先,您需要创建一个串口实例(我怀疑您已经完成了,因为您会收到不同的错误)。我在创建Form1时创建我的实例:
public Form1()
{
InitializeComponent();
// Create an instance of a serial port
serialPort1 = new SerialPort();
}
在下面我将button2重命名为openPortButton:
private void openPortButton_Click(object sender, EventArgs e)
{
如果串口已经打开,你可以通过关闭串口使你的程序变得激进:
// Check if the serial port is already open. If it is close it down first.
if (serialPort1.IsOpen == true)
{
serialPort1.Close();
}
通过将串行端口包装在try-catch语句中,您还可以捕获任何异常:
if(!serialPort1.IsOpen)
{
serialPort1.PortName = "COM3";
try
{
serialPort1.Open();
}
catch
{
// Add exception handling here
}
}
然后测试串口是否实际打开:
// Test connection
if (serialPort1.IsOpen == true)
{
richTextBox1.Text = "opened";
commsEstablished = true;
}
else
{
richTextBox1.Text = "not successful";
commsEstablished = false;
}
}
commsEstablished
是Form1中的私有bool。
现在按下发送按钮时测试commsEstablished
变量:(我还将button1重命名为sendButton)
private void sendButton_Click(object sender, EventArgs e)
{
if(commsEstablished && serialPort1.IsOpen)
{
string text = richTextBox1.Text;
try
{
serialPort1.WriteLine(text);
}
catch
{
// Add exception handling here
}
}
}