SerialPort.ReadLine()不从Arduino发送的USB COM端口读取数据

本文关键字:COM USB 数据 读取 ReadLine 不从 Arduino SerialPort | 更新日期: 2023-09-27 18:06:28

我正在使用Arduino将文本数据发送到COM15(通过微型USB)。在我的桌面上,我试图从我的c#应用程序读取数据。但是,当我运行它时,控制台什么也没有显示,程序卡在"string s = myPort.ReadLine()"行。

下面是我的c#程序:
static void Main(string[] args)
{
    var myPort = new SerialPort("COM15", 115200);
    myPort.Open();
    while (true)
    {
        var s = myPort.ReadLine(); // execution stucks here waiting forever!
        Console.WriteLine(s);
    }
}
以下是Arduino代码(将数据发送到COM15):
int counter = 1;
void setup() {
  // put your setup code here, to run once:
 Serial.begin(115200);
}
void loop() {
  // put your main code here, to run repeatedly:
Serial.println(" Data Loop = " + String(counter));
counter++;
delay(500);
}

arduino串行监视器确实显示COM15接收到的数据。我还尝试了其他读取COM端口的软件,并验证了端口上的数据可用。

SerialPort.ReadLine()不从Arduino发送的USB COM端口读取数据

通过在myPort.Open()命令之前添加以下行,我设法解决了我的问题并成功地从COM读取:

myPort.DtrEnable = true;

你可能会问什么是Dtr标志。Dtr代表"数据终端就绪",根据维基百科:

DTR (Data Terminal Ready)是RS-232串行中的控制信号从数据终端设备(DTE)传输的通信,例如如计算机、数据通信设备(DCE)等调制解调器,表示终端已准备好进行通信调制解调器可以发起一个通信通道。