我正在使用一个步进电机连接到Arduino Uno上的引脚9,10,11和12。为了旋转步进电机,我写了一个辅助方法。这种特殊的步进电机每步旋转1.8度。方法是:
void rotateStepperBy(float deg) {
int steps = deg / 1.8;
motor.step(steps);
}
该方法适用于小程度测量,但如果我给它更大程度的测量,如45和90,则表现出意想不到的方式(旋转,前后旋转)。这是我尝试的一个例子:< / p>
#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是否完成,然后程序的其余部分恢复,或者是否需要更长的延迟来进行更大程度的测量以使电机完成步进?
答案 0 :(得分:1)
motor.step是否完成,然后程序的其余部分恢复..
是的,motor.step()
是a blocking function:
此功能正在阻止;也就是说,它会等到电机有 完成移动以将控制传递到草图中的下一行。
但您可能需要设置setup()
的速度,例如motor.setSpeed(30);
。
查看code for stepper它看起来像step_delay
保持未定义(或零),直到调用setSpeed()
(即它在构造函数中没有得到默认值..)< / p>
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;
}