2017-04-23 215 views
1

我試圖讀取從arduino獲得的傳感器值,並使用脈衝傳感器和DS18B20(溫度傳感器)在labview上顯示它,但是我需要while循環快速進行(大約50 ms ),以便從心臟脈搏中獲得波形圖,但是如果它比一分鐘慢,那麼這些值就會混合起來(我得到溫度而不是模擬傳感器值,反之亦然)有什麼建議可以解決這個問題? 我得到一個以逗號分隔的serial.print中的值,所以我在LV上使用了一個匹配模式來分隔它們Code on labview to read buffer from arduino where the different values are separated by a comma使用labview從arduino快速獲得緩衝區

回答

1

如果您檢查端口上有多少個字節正在等待並且只讀取了該字節數,你可能會收到不完整的消息。如果沒有看到數據的例子以及發送它的Arduino代碼的線路,很難說這是怎麼回事,但總的來說,要讓這種數據交換工作的很好,我建議你:

  • 確保Arduino代碼發送終止字符eg在每對值後換行(0x0A
  • 當您在LabVIEW中配置串口時,設置並啓用它作爲讀取的終止字符 - 無論如何,這應該是默認值。在進入循環之前,我會清除讀取緩衝區,以清除LabVIEW代碼未運行時累積的任何舊數據。
  • 在循環中,不要檢查Bytes at Port,但將串行讀取函數的大數值連接到bytes to read。串行讀取將讀取串行緩衝區中的字節並將其返回幷包括終止字符,並等待它們在必要時到達(達到爲端口配置的超時設置)。這樣你應該總是收到一個完整的字符串。

要從接收到的字符串中獲取數據,我將使用Scan from String函數。對於您的示例,它看起來好像合適的掃描字符串將是類似於%f,%f\n的那樣,它指定由逗號分隔並以換行符結尾的兩個浮點值。從字符串掃描有一個錯誤輸出,並且還允許您爲每個要讀取的值默認連線,以便您可以檢測數據是否未被正確接收。

在此處顯示LabVIEW代碼而不是截圖的最佳方式是在圖中選擇它並選擇Edit>Create VI Snippet from Selection。這樣可以保存一個PNG圖像,其中嵌入了實際的LabVIEW代碼。另外請考慮安排你的程序框圖,以便數據流儘可能地從左到右,因爲這個約定使得它更容易閱讀。