SerialPort.ReadLine()不读取Arduino

时间:2016-09-09 00:13:16

标签: c# arduino serial-port

我正在使用Arduino向COM15(通过micro 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端口的软件,并验证了端口上的数据是否可用。

2 个答案:

答案 0 :(得分:3)

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

myPort.DtrEnable = true;

你可能会问什么是Dtr标志。 Dtr代表"数据终端就绪"并根据Wikipedia

  

数据终端就绪(DTR)是RS-232串行的控制信号   从数据终端设备(DTE)发送的通信等   作为计算机,数据通信设备(DCE),例如a   调制解调器,表示终端已准备好进行通信   调制解调器可以启动通信信道。

答案 1 :(得分:1)

您没有正确读取端口。

以下是如何正确读取数据输入的示例。

public static void Main()
{
    SerialPort mySerialPort = new SerialPort("COM1");

    mySerialPort.BaudRate = 9600;
    mySerialPort.Parity = Parity.None;
    mySerialPort.StopBits = StopBits.One;
    mySerialPort.DataBits = 8;
    mySerialPort.Handshake = Handshake.None; // Some device needs a different handshake.

    mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

    mySerialPort.Open();

    Console.WriteLine("Press any key to continue...");
    Console.WriteLine();
    Console.ReadKey();
    mySerialPort.Close();
}

private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
    SerialPort sp = (SerialPort)sender;
    string indata = sp.ReadExisting();
    Debug.Print("Data Received:");
    Debug.Print(indata);
}