2013-07-24 71 views
0

我正在做一個工程,我用串行端口從我的電腦發送字符串到arduino,arduino讀取它們並根據字符串移動一個電機或另一個電機,這是驗證碼:用adafruit馬達屏蔽移動2個步進電機

#include <AccelStepper.h> 
#include <AFMotor.h> 


AF_Stepper motor1(200, 1); 
AF_Stepper motor2(200, 2); 

String steps= ""; 

void forwardstep1() { 
    motor1.onestep(FORWARD, SINGLE); 
} 
void backwardstep1() { 
    motor1.onestep(BACKWARD, SINGLE); 
} 
void forwardstep2() { 
    motor2.onestep(FORWARD, SINGLE); 
} 
void backwardstep2() { 
    motor2.onestep(BACKWARD, SINGLE); 
} 

AccelStepper stepper1(forwardstep1, backwardstep1); 
AccelStepper stepper2(forwardstep2, backwardstep2); 

void setup() { 

    Serial.begin(9600); 
    Serial.println("Stepper program!"); 
    stepper1.setMaxSpeed(200.0); 
    stepper2.setMaxSpeed(200.0); 
    stepper1.setAcceleration(100.0); 
    stepper2.setAcceleration(100.0); 

} 

void loop() { 

} 

void serialEvent() { 

    while(Serial.available()) { 
    int inChar = Serial.read(); 
    Serial.print("Echo:"); 
    Serial.write(inChar); 
    if (isDigit(inChar)) { 
     steps += (char)inChar; 
    } 
    if (inChar == 'u') { 
     Serial.print("Up:" + steps); 
     Serial.println(); 
     long POSITION = stepper1.currentPosition() + steps.toInt(); 
     stepper1.runToNewPosition(POSITION); 
     steps = ""; 
     Serial.println(); 
    } 
    if (inChar == 'U') { 
     Serial.print("Up:" + steps); 
     Serial.println(); 
     long POSITION = stepper2.currentPosition() + steps.toInt(); 
     stepper2.runToNewPosition(POSITION); 
     steps = ""; 
     Serial.println(); 
    } 
    } 
} 

我的問題是,當我移動stepper1,然後嘗試移動,除非我重新設置的Arduino它不動吧的stepper2。

謝謝!

回答

0

我認爲你需要逐步調試它。首先檢查您是否能夠獨立控制每臺電機的位置。你可以寫一個簡單的函數來檢查它。只需用固定的臺階交替移動電機。如果兩個電機工作正常,那麼您可以繼續調試串行通信。但是,如果電機工作不正常,請檢查連接等(硬件調試)。還要檢查步進電機的初始化。

如果這工作正常,那麼你可以檢查你是否能夠從你的電腦接收arduino的正確響應。每當你收到新的角色時,大概點亮不同的LED。通過這種方式,您可以確認您的電機和串行通信可以正常工作。

此外,由於您是從串行接收電機的位置。我會建議檢查你是否正確接受這個位置。也許你應該先嚐試在程序中對固定步驟進行硬編碼,並在收到'u'和'U'時查看它是否有效。

void serialEvent() { 
    static int fixed_step_1; 
    static int fixed_step_2; 
    while(Serial.available()) { 
    int inChar = Serial.read(); 
    Serial.print("Echo:"); 
    Serial.write(inChar); 

    if (inChar == 'u') { 
     Serial.print("Up:"); 
     long POSITION = stepper1.currentPosition() + fixed_steps_1; 
     stepper1.runToNewPosition(POSITION); 
     fixed_steps_1++; 
     Serial.println(); 
    } 
    if (inChar == 'U') { 
     long POSITION = stepper2.currentPosition() + fixed_steps_2; 
     stepper2.runToNewPosition(POSITION); 
     fixed_steps_2++; 
     Serial.println(); 
    } 
    } 
} 

如果上面的工作正常,那麼你知道它是可以轉換的情況。雖然所有這些步驟都需要時間,但您可以準確指出問題。