2017-04-23 201 views
1

我试图读取从arduino获得的传感器值,并使用脉冲传感器和DS18B20(温度传感器)在labview上显示它,但是我需要while循环快速进行(大约50 ms ),以便从心脏脉搏中获得波形图,但是如果它比一分钟慢,那么这些值就会混合起来(我得到温度而不是模拟传感器值,反之亦然)有什么建议可以解决这个问题? 我得到一个以逗号分隔的serial.print中的值,所以我在LV上使用了一个匹配模式来分隔它们Code on labview to read buffer from arduino where the different values are separated by a comma使用labview从arduino快速获得缓冲区

回答

1

如果您检查端口上有多少个字节正在等待并且只读取了该字节数,你可能会收到不完整的消息。如果没有看到数据的例子以及发送它的Arduino代码的线路,很难说这是怎么回事,但总的来说,要让这种数据交换工作的很好,我建议你:

  • 确保Arduino代码发送终止字符eg在每对值后换行(0x0A
  • 当您在LabVIEW中配置串口时,设置并启用它作为读取的终止字符 - 无论如何,这应该是默认值。在进入循环之前,我会清除读取缓冲区,以清除LabVIEW代码未运行时累积的任何旧数据。
  • 在循环中,不要检查Bytes at Port,但将串行读取函数的大数值连接到bytes to read。串行读取将读取串行缓冲区中的字节并将其返回并包括终止字符,并等待它们在必要时到达(达到为端口配置的超时设置)。这样你应该总是收到一个完整的字符串。

要从接收到的字符串中获取数据,我将使用Scan from String函数。对于您的示例,它看起来好像合适的扫描字符串将是类似于%f,%f\n的那样,它指定由逗号分隔并以换行符结尾的两个浮点值。从字符串扫描有一个错误输出,并且还允许您为每个要读取的值默认连线,以便您可以检测数据是否未被正确接收。

在此处显示LabVIEW代码而不是截图的最佳方式是在图中选择它并选择Edit>Create VI Snippet from Selection。这样可以保存一个PNG图像,其中嵌入了实际的LabVIEW代码。另外请考虑安排你的程序框图,以便数据流尽可能地从左到右,因为这个约定使得它更容易阅读。