2017-05-28 83 views
0

我正在使用步進電機連接Arduino Uno上的引腳9,10,11和12。爲了旋轉步進電機,我寫了一個輔助方法。這個特殊的步進電機每步旋轉1.8度。其方法是:Arduino Uno步進電機問題

void rotateStepperBy(float deg) { 
    int steps = deg/1.8; 
    motor.step(steps); 
} 

該方法適用於小程度的措施,但意想不到的方式表現(下旋轉,來回旋轉),如果我給它更大程度的措施,如45和90.下面是一個例子,我試圖:

#include <Stepper.h> 

Stepper motor(200, 9, 10, 11, 12); 

void setup() { 
    rotateStepperBy(360); 
} 

void loop() { 
    rotateStepperBy(90); 
    delay(10); 
} 

void rotateStepperBy(float deg) { 
    int steps = deg/1.8; 
    motor.step(steps); 
} 

是否motor.step完成,然後將程序的其餘部分恢復或確實有需要爲更大程度的測量較長的延遲,使電機完成步進?

回答

1

是否motor.step完成,然後將程序的其餘部分恢復..

是,motor.step()a blocking function

此功能是阻擋;也就是說,它將等待,直到電機已完成移動,以將控制傳遞到草圖中的下一行。

但是,您可能必須在setup()中設置速度,例如motor.setSpeed(30);

看着它看起來像step_delaycode for stepper撐不定(或零),直到setSpeed()被稱爲(即它不會在構造函數中的默認值。)

unsigned long step_delay; // delay between steps, in ms, based on speed 

此值僅變化setSpeed()

/* 
* Sets the speed in revs per minute 
*/ 
void Stepper::setSpeed(long whatSpeed) 
{ 
    this->step_delay = 60L * 1000L * 1000L/this->number_of_steps/whatSpeed; 
} 
+0

謝謝!這解決了這個問題。 – mabsoftware