在 labview 上从 arduino 快速读取数据但得到零

Read data from arduino on labview fast but getting zeros

我正在尝试从 labview 中读取一些数据(它们是用逗号分隔的整数)但是当我在 while 循环中等待时间少于 100 毫秒时,指示灯不断闪烁并且我得到了 ceros .

这是我的arduino代码:

#include <OneWire.h>
#include <DallasTemperature.h>
#define Pin 2 
int ecg = 0;
OneWire ourWire(Pin); 
DallasTemperature sensors(&ourWire);
{
delay(1000);
Serial.begin(9600);
sensors.begin(); 
}
void loop()
{
  int corazon= analogRead(0);
sensors.requestTemperatures();
Serial.print(sensors.getTempCByIndex(0)); 
Serial.print(",");
Serial.println(corazon);
delay(1);
}

首先,您有两个并行循环 运行ning,并且在每个循环中您都从同一个串行端口读取数据。从端口读取数据会将其从串行输入缓冲区中移除,因此到达缓冲区的每个字符只会被一个循环或另一个循环读取,而不是同时被两个循环读取。循环之间没有任何同步,所以哪个角色去哪里是随机的。大多数时候每个循环都会读取一条不完整的消息,因此您的代码无法将其解码为数字,因此它 return 是一个零。

其次,如中所述,不要使用Bytes at Port,在配置端口时使用读取终止字符设置。这样每个 Serial Read 将 return 一条完整的消息。如果你这样做,你不需要在循环中等待函数 - 它会 运行 只需要跟上传入数据所需的速度。

says here Serial.println 发送回车 return 然后在数据末尾换行,所以要使用换行(十进制 10)作为终止符。无论如何,这实际上是默认设置,因此一旦删除重复循环和 Bytes at Port 它可能就会开始工作。

在你的示例代码中,我看不出两个并行循环的任何原因,但如果你真的需要让来自 Arduino 的数据在 LabVIEW 的两个不同循环中可用,请使用诸如队列之类的通信技术或通知程序将其从一个传递给另一个。 LabVIEW 中有相关示例和帮助。

顺便说一下,在循环中不需要序列结构的前两帧 - 由于数据流,代码将按该序列执行。