2012-12-28 2 views
0

arduino에서 아날로그 센서를 내 PC로 읽고 싶습니다.Visual C++로 직렬 포트 프로그래밍 arduino 프로그래밍

:

아두 이노 프로그램이 있습니다 : 그것은 1023해야하므로

void setup() { 
    // initialize serial communications at 9600 bps: 
    Serial.begin(9600); 
} 

void loop() { 
char request[1]; 
if(Serial.available()){ 
request[0]=Serial.read(); 
Serial.print(analogRead(atoi(request))); 
Serial.print("\n\r"); 
}; 
delay(2);      
} 

내 비주얼 C++

#include <windows.h> 
#include "stdafx.h" 
#include "SerialClass.h" 

char buffer[20]; 
char buf0[200]; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    Serial oSerial("COM6:"); 

while(1){ 
sprintf_s(buffer,"0");  
    oSerial.WriteData(buffer,1); 
Sleep(1000); 
oSerial.ReadData(buf0,4); 
printf("Sensor 0: %s \n",buf0); 
Sleep(1000); } 
} 

내 프로그램의 결과가 안정되지, 나는 input0에 5V를 넣어

sensor 0 : 
sensor 0 : 10230 
sensor 0: 
100 
sensor 0: 23 
0 
sensor 0: 10230 

나는 시리얼 모니터로 내 arduino에서 프로그램을 작동하려고합니다. 그래서 문제는 C++ 프로그램에있을 수 있습니다

어떤 생각이 있습니까?

답변

1

PC가 4 개의 문자를 찾고 Arduino가 요청 당 3-6 개의 문자를 보내므로이 문제가 발생했다고 생각합니다.

Arduino가 보낸 캐리지 리턴 (\ r)을받을 때까지 버퍼에 문자를받을 것을 권장합니다. 그런 다음 전체 문자열을 출력 할 수 있습니다. 제어 문자를 처리해야합니다.

테스트되지 않은 예 :

int x=0; 
int char_rev; 

while(buf0[x]!='\r') { 

    char_rev = oSerial.ReadData(buf0[x],1); 
    if (char_rev==1) { 
     x++; 
    } 
} 
buf0[x]=0; 
+0

으로

oSerial.ReadData(buf0,4); 

를 교체 당신 말이 맞아, 제프 감사합니다, 그것은 버퍼의 문제이다. – Limavolt

+0

Limavolt가 효과가 있습니까? – Saifee

관련 문제