我試圖控制電機步進通過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,我認爲是發送數據,但爲什麼電機因此未工作?任何想法?
分而治之。首先通過運行* sweep *示例程序確保伺服器工作。接下來通過發回你收到的東西來確保串口工作正常。接下來思考如何使用PC發送的4個字節在您的Arduino上一次處理一個字節,這當然是行不通的。通過發送單個字節而不是ASCII來改善您的PC程序 –
我嘗試過使用電位計和電機伺服工作正常,我已經更改了arduino程序,但伺服現在始終處於最大位置,儘管我更改了值 – Limavolt
您是發送垃圾,PC發送的最後一個字節是0.字符串終止符。如果val_test大於9,你也會溢出緩衝區,非常糟糕。正如我所說,專注於發送單個字節。 –