2017-04-26 2 views
0

나는 labview (정수는 쉼표로 구분되어 있습니다)에서 데이터를 읽으려고합니다. 그러나 while 루프에서 대기 시간을 100ms 미만으로 설정하면 표시기 깜박임을 계속하고 Im는 ceros를 얻는다. enter image description herearduino의 데이터를 labview에서 빨리 읽지 만 cero를 얻는 것

이 내 아두 이노 코드 : 모든

#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을 반환합니다.

둘째, my answer to your last question에서 설명한대로 Bytes at Port을 사용하지 말고 포트를 구성 할 때 읽기 종료 문자 설정을 사용하십시오. 그러면 각 Serial Read은 하나의 완전한 메시지를 반환합니다. 이 작업을 수행하면 루프에서 대기 기능이 필요하지 않습니다. 들어오는 데이터를 따라 잡는 데 필요한만큼 빨리 실행됩니다.

says hereSerial.println은 줄 바꿈 문자를 보내고 데이터 끝에는 줄 바꿈 문자를 사용하므로 줄 바꿈 문자 (십진수 10)를 종료 문자로 사용하려고합니다. 이것은 실제로 기본값입니다. 따라서 중복 루프를 제거하자마자 Bytes at Port이 작동하기 시작합니다.

예제 코드에서는 두 개의 병렬 루프에 대한 어떤 이유도 볼 수 없지만, 실제로 LabVIEW에서 Arduino의 데이터를 두 개의 다른 루프에서 사용할 수 있도록하려면 큐와 같은 통신 기술을 사용하거나 알리미는 하나에서 다른 것으로 전달합니다. LabVIEW의 예제와 도움말이 있습니다.

그건 그렇고, 루프의 시퀀스 구조의 처음 두 프레임이 필요 없습니다. 코드는 데이터 흐름 때문에 그 순서대로 실행됩니다.

+0

포트에서 Bytes를 제거하자마자 고맙습니다. 아직 일을 시작하고 미안 해요. 아직 배우고 있습니다. –

관련 문제