2017-04-26 140 views
0

我试图从labview读取一些数据(它们是用逗号分隔的整数)但是当我在while循环中等待时间少于100 ms时,指示器不断闪烁,我得到ceros。 enter image description here在labview上快速读取arduino的数据但是获得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); 
} 

回答

1

首先,你必须在平行且每次都从同一个串口读取循环中运行两个循环。从端口读取数据会将其从串行输入缓冲区中删除,因此到达缓冲区的每个字符只能由一个循环或另一个循环读取,而不能同时读取。循环之间没有任何同步,所以随机哪个角色到哪里。每个循环大部分时间都会读取不完整的消息,因此您的代码无法将其解码为数字,因此它会返回零。

其次,如my answer to your last question中所述,请勿使用Bytes at Port,请在配置端口时使用读取终止字符设置。这样每个Serial Read将返回一个完整的消息。如果你这样做,你不需要在循环中有一个等待函数 - 它只会跟随输入数据一样快地运行。

says hereSerial.printlnSerial.println发送一个回车,然后在数据的末尾换行,所以你想使用换行符(十进制10)作为终止字符。这实际上是默认情况下,所以只要你删除重复的循环和Bytes at Port它可能会开始工作。

在您的示例代码中,我看不到任何两个并行循环的原因,但如果您确实需要在LabVIEW中使用两个不同循环中的Arduino数据,请使用通信技术,例如队列或通知程序将它从一个传递给另一个。 LabVIEW中有这些例子和帮助。

顺便说一下,循环中不需要序列结构的前两帧 - 由于数据流的原因,代码无论如何都会按顺序执行。

+0

非常感谢你,一旦我在端口删除了字节,它就开始工作了,对不起,我还在学习 –