2017-05-28 47 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