2017-04-23 6 views
1

나는 arduino에서 얻은 센서 값을 읽으려고하는데 펄스 센서와 DS18B20 (온도 센서)을 사용하여 labview에 표시하려고합니다. 그러나 while 루프는 빠르게 진행해야합니다 (약 50ms) 심장 박동으로부터 파형 차트를 얻으려면 분당 속도가 느려지면 값이 섞이게됩니다 (나는 아날로그 센서 값 대신 온도를 받고 반향을 일으킴). 이것을 수정하기위한 제안은 무엇입니까? serial.print에서 쉼표로 구분 된 값을 얻으므로 LV에서 일치 패턴을 사용하여 구분합니다. Code on labview to read buffer from arduino where the different values are separated by a commaarduino에서 labview를 사용하여 버퍼를 빨리 얻으십시오.

답변

1

포트에서 대기중인 바이트 수를 확인하고 해당 바이트 수만 읽으면, 당신은 불완전한 메시지를 얻게 될 것입니다. 데이터의 예와 그것을 전송하는 Arduino 코드의 라인을 보지 않고서 이것이 어떻게 잘못 될지 정확하게 말하기는 어렵지만 일반적으로 이러한 종류의 데이터 교환을 사용하면 잘 작동합니다.

  • Arduino 코드가 종료 문자를 전송하는지 확인하십시오.
  • LabVIEW에서 직렬 포트를 구성 할 때이 값을 읽음의 종료 문자로 설정하고 활성화하십시오.이 값을 기본값으로 사용해야합니다. 그런 다음 루프에 들어가기 전에 읽기 버퍼를 지우고 LabVIEW 코드가 실행되지 않는 동안 거기에 축적 된 이전 데이터를 제거합니다.
  • 루프에서 Bytes at Port을 확인하지 말고 큰 값을 bytes to read의 직렬 읽기 기능에 연결하십시오. 직렬 읽기는 직렬 버퍼에서 종료 문자까지의 바이트를 읽고 리턴하며 필요한 경우 도달 할 때까지 대기합니다 (포트에 구성된 시간 초과 설정까지). 그렇게하면 항상 완전한 문자열을 받아야합니다.

받은 문자열에서 데이터를 가져 오려면 Scan from String 함수를 사용합니다. 예를 들어 적절한 스캔 문자열이 쉼표로 구분되고 개행 문자로 끝나는 두 개의 부동 소수점 값을 지정하는 %f,%f\n과 같은 것으로 보입니다. String에서 스캔은 오류 출력을 가지며 읽으려는 각 값에 대해 기본값으로 연결할 수 있으므로 데이터가 올바르게 수신되지 않았는지 여부를 감지 할 수 있습니다.

스크린 샷을 찍는 대신 LabVIEW 코드를 표시하는 가장 좋은 방법은 다이어그램에서 코드를 선택하고 Edit>Create VI Snippet from Selection을 선택하는 것입니다. 이렇게하면 실제 LabVIEW 코드가 포함 된 PNG 이미지가 저장됩니다. 또한 데이터 흐름이 왼쪽에서 오른쪽으로 최대한 길어 지도록이 규칙을 사용하면 블록 다이어그램을 배치하는 것이 좋습니다.