【问题标题】:Obtain buffer fast from arduino using labview使用labview从arduino快速获取缓冲区
【发布时间】:2017-04-23 22:17:10
【问题描述】:
我正在尝试读取从 arduino 获得的传感器值,并使用脉冲传感器和 DS18B20(温度传感器)将其显示在 labview 上,但是我需要 while 循环快速运行(大约 50 毫秒)以获得波形来自心脏脉搏的图表,但如果它比一分钟慢,则值会混淆(我得到温度而不是模拟传感器值,反之亦然)有什么建议可以解决这个问题吗?
我在以逗号分隔的 serial.print 中获取值,因此我在 LV 上使用了匹配模式来分隔它们
【问题讨论】:
标签:
arduino
arduino-uno
labview
【解决方案1】:
如果您检查端口等待的字节数并且只读取该字节数,您可能会收到不完整的消息。如果没有看到数据示例和发送数据的 Arduino 代码行,很难确切地说这是怎么回事,但总的来说,为了让这种数据交换正常工作,我建议你:
- 确保 Arduino 代码发送终止字符,例如每对值后有一个换行符 (
0x0A)
- 当您在 LabVIEW 中配置串行端口时,设置并启用它作为读取的终止字符 - 无论如何这应该是默认值。然后,我会在进入循环之前清除读取缓冲区,以删除在 LabVIEW 代码未运行时积累的任何旧数据。
- 在循环中,不要检查
Bytes at Port,而是将一个较大的值连接到串行读取功能的bytes to read。串行读取将从串行缓冲区读取并返回字节,直至终止字符(包括终止字符),并在必要时等待它们到达(直至为端口配置的超时设置)。这样,您应该始终收到一个完整的字符串。
要从收到的字符串中获取数据,我会使用Scan from String 函数。对于您的示例,它看起来好像适当的扫描字符串类似于%f,%f\n,它指定了两个用逗号分隔并以换行符结尾的浮点值。 Scan from String 有一个错误输出,还允许您为尝试读取的每个值连接默认值,这样您就可以检测数据是否没有被正确接收。
在此处显示 LabVIEW 代码的最佳方法是在图表上选择它并选择 Edit > Create VI Snippet from Selection,而不是截屏。这将保存一个 PNG 图像,其中也嵌入了实际的 LabVIEW 代码。还请考虑安排您的框图,使数据流尽可能从左到右,因为这种约定使其更易于阅读。