2017-04-26 142 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

非常感謝你,一旦我在端口刪除了字節,它就開始工作了,對不起,我還在學習 –