我正在尝试从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);
}
答案 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中有这些例子和帮助。
顺便说一句,你的循环中不需要序列结构的前两个框架 - 由于数据流,代码将以该顺序执行。