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

Kam*_*ely 2 c# serial-port arduino

我正在使用 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是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);
}
Run Code Online (Sandbox Code Playgroud)

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

Kam*_*ely 6

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

myPort.DtrEnable = true;
Run Code Online (Sandbox Code Playgroud)

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

数据终端就绪 (DTR) 是 RS-232 串行通信中的控制信号,从数据终端设备 (DTE)(例如计算机)传输到数据通信设备 (DCE)(例如调制解调器),以指示终端处于准备好进行通信,调制解调器可以启动通信信道。