2016-09-09 189 views
1

我使用Arduino將文本數據發送到COM15(通過微型USB)。在我的桌面上,我試圖從我的C#應用​​程序中讀取數據。但是,當我運行它時,控制檯不顯示任何內容,並且程序在「string s = myPort.ReadLine()」行處出現問題。SerialPort.ReadLine()不會從Arduino發送的USB COM端口讀取數據

以下是我的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端口的軟件,並驗證數據在端口可用。

回答

3

通過myPort.Open()命令之前添加以下行,我設法解決我的問題,並從COM成功讀取:

myPort.DtrEnable = true; 

你可能會問什麼是DTR標誌。 DTR代表「數據終端就緒」和根據Wikipedia

數據終端就緒(DTR)是在RS-232串行 通信的控制信號,從數據終端設備(DTE)發送,例如 作爲計算機到數據通信設備(DCE),例如 調制解調器,以指示終端已準備好進行通信,並且調制解調器可以發起通信信道。

1

您沒有正確讀取端口。

下面是如何正確讀取comport數據輸入的示例。

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); 
}