2013-04-20 39 views
0

我正在使用C#從Arduino開發板讀取數據。在C#中讀取串口的格式不正確

在C#中,我有以下幾點:

// Write a string 
port.Write("x"); 

Thread.Sleep(50); 
SerialPortRead(); 

...在SerialPortRead()我:

private static void SerialPortRead() 
{ 
    port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); 
} 

private static void port_DataReceived(object sender,SerialDataReceivedEventArgs e) 
{ 
    Console.WriteLine(port.ReadExisting()); 
} 

,並輸出將類似於:

329327 

32 

7 

327 


3 



26 



327 




3 





26 





32 


7 

我做錯了什麼?輸出應該在326-329左右,這個值來自一個指南針,它連接到我從Arduino讀取的其中一個引腳。

需要注意的是:

在Arduino的,我有看針對輸入字符x和返回指南針的價值串行讀法。

+0

我建議使用[ReadByte](http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.readbyte.aspx)來調試問題 - 您可能正在閱讀混合二進制/文本... – 2013-04-20 18:31:56

回答

0

我猜你正在閱讀指南針正在寫的更快。這樣,你的程序就會相信它正在接受兩個方向,而如果它延遲了一點閱讀,它只會收到一個。

這個假設得到支持,如果你將讀取的數據分成三個數字,我們得到你期望的範圍內的方向。

嘗試在發送觸發字符之後在讀取之前添加一個延遲,或者甚至更好 - 添加一個控制字符來指示指南針已經寫入了整個方向,然後再讀取,直到您收到該字符。

編輯:我現在注意到,你已經有一個睡眠 - 所以剩下的選項將是一個分離/終止字符。

+0

你能舉個例子嗎? – CB4 2013-04-20 18:44:13

+0

沒有關於您的設置的更多信息,即來自雙方的代碼,答案是否定的。 – fredrik 2013-04-20 20:37:57

+0

我修好了。結果是閱讀速度太快了 – CB4 2013-04-21 02:47:45