2017-05-28 31 views
0

私はArduino Unoの9,10,11,12番ピンに接続されたステッピングモータで作業しています。ステッパーモーターを回転させるために、私はヘルパーメソッドを書いた。この特定のステッピングモーターは1ステップあたり1.8度回転します。方法は次のとおりです。Arduino Uno Stepper Motor Issues

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

方法は、わずかな程度の対策のために正常に動作しますが、私はそれを45と90のような、より大きな程度の対策を与えればここに例を示します(前後に回転し、回転下)予期しない方法で動作しますIしようとしていた:

#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()a blocking functionある

.. motor.step完了し、その後、プログラムの残りの部分が再開ん。

この関数はブロックしています。つまり、モーターが に移動してスケッチの次の行に制御を渡すまで待機します。

しかし、おそらくsetup()に速度を設定する必要があります(例:motor.setSpeed(30);)。

それはsetSpeed()が呼び出されるまで未定義(またはゼロ)したままstep_delayのように見えますcode for stepperを見ると(すなわち、それはコンストラクタでデフォルト値を取得しません。)

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

関連する問題