在labview上快速读取arduino中的数据,但得到零

时间:2017-04-26 03:47:18

标签: arduino labview temperature

我正在尝试从labview中读取一些数据(它们是用逗号分隔的整数)但是当我在while循环中等待时间小于100 ms时,指示符会一直闪烁并且我得到了ceros。{ {3}}

这是我的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 个答案:

答案 0 :(得分:1)

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

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

Serial.println Bytes at Port发送回车,然后在数据末尾发送换行符,因此您希望使用换行符(十进制10)作为终止符。这实际上是默认值,因此只要您删除重复循环并且 knob.bind('mousewheel', function(e){ if(e.originalEvent.wheelDelta < 0) { moveKnob('down'); } else { moveKnob('up'); } return false; }); 它可能就会开始工作。

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

顺便说一句,你的循环中不需要序列结构的前两个框架​​ - 由于数据流,代码将以该顺序执行。