2014-01-08 75 views
0

我試圖控制電機步進通過arduino uno板與滑塊在visual c + +。接口C++控制電機步進與arduino

但伺服器根本沒有移動。

在這裏PC端程序:

void CENVSConfigDlg::OnBnClickedButton1() 
{ 
SetTimer(cTimer1,80,NULL); 
    } 

void CENVSConfigDlg::OnTimer(UINT_PTR ID) 
{ 
    if(ID==cTimer1){ 
    DWORD nbytes; 
    char buf[5]; 
    sprintf(buf, "%d \n", val_test); 
    /* Open serial port. */ 
     if(!WriteFile(hnd_serial, (void*)buf, 5, &nbytes, NULL)){MessageBox(L"Write Com Port fail!");return;} 
} 

和Arduino的程序:

#include <Servo.h> 
Servo servoMain; 

int index=0; 
String inputString; 

void setup() 
{ 
Serial.begin(9600); 
servoMain.attach(9); 
} 

void loop() 
{ 
    int data; 
while (Serial.available()) 
{ 
char inChar = (char)Serial.read(); 
if (inChar == '\n' || inChar == 'z') 
{ 
    data=stringToInt(inputString); 
Serial.println(data); // 
inputString=""; 

servoMain.write(data); //tambahannya 
delay(50); 

break; 
} 
if (inChar != 0) 
{ 
inputString += inChar; 
} 
} 
} 

int stringToInt(String s) 
{ 
char char_string[s.length()+1]; 
s.toCharArray(char_string, s.length()+1); 
return atoi(char_string); 
} 

的PC,我認爲是發送數據,但爲什麼電機因此未工作?任何想法?

+0

分而治之。首先通過運行* sweep *示例程序確保伺服器工作。接下來通過發回你收到的東西來確保串口工作正常。接下來思考如何使用PC發送的4個字節在您的Arduino上一次處理一個字節,這當然是行不通的。通過發送單個字節而不是ASCII來改善您的PC程序 –

+0

我嘗試過使用電位計和電機伺服工作正常,我已經更改了arduino程序,但伺服現在始終處於最大位置,儘管我更改了值 – Limavolt

+0

您是發送垃圾,PC發送的最後一個字節是0.字符串終止符。如果val_test大於9,你也會溢出緩衝區,非常糟糕。正如我所說,專注於發送單個字節。 –

回答

0

首先,串行鏈接是否工作?無論是硬件還是軟件原因,RS232鏈路無法工作的方式的數量都是傳奇。除非你能證明硬件可以傳輸數據,否則看看你的專用軟件是毫無意義的。如果你有一個示波器,用它來查看是否有任何內容正在傳輸,然後檢查它是否到達Arduino輸入的正確引腳。如果您無法訪問示波器,可以使用一個小型LED和一個4.7K電阻來指示線路上有數據 - 它將隨數據閃爍。

+0

我已經編輯程序,PC程序可以打開和關閉LED(使用其他)。當我應用於電機伺服程序時,儘管我將值設置爲0-90(最大值爲180度),但電機旋轉到最大值, – Limavolt