2012-12-28 156 views
0

我想從arduino讀取模擬傳感器到我的電腦。使用Visual C++編程串口arduino

Arduino的程序是:

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);      
} 

和我的Visual 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); } 
} 

和我的程序的結果不是很穩定,我把5V的INPUT 0,所以它必須是1023:

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

我嘗試在我的arduino中使用串口監視程序正在工作。所以可能的問題是在C++程序

任何人有想法?

回答

1

我相信這個問題是由於你的電腦正在尋找4個字符,Arduino每個請求發送3-6個字符。

我會建議你接收字符到你的緩衝區,直到你收到由Arduino發送的回車(\ r)。然後你可以輸出完整的字符串。您將需要處理控制字符。

未經測試的例子:

更換

oSerial.ReadData(buf0,4); 

隨着

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

感謝傑夫,你是正確的,這是緩衝的問題。 – Limavolt

+0

它爲你工作Limavolt? – Saifee