2013-04-20 38 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