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