ステッピングモーターを回す時に使った、Stepperライブラリについて。
こんな感じで使ってる。
**********
001 #include <Stepper.h>
002 Stepper stepper(200, 8, 9, 10, 11);
003 void setup() {
004 stepper.setSpeed(60);
005 }
006 void loop() {
007 stepper.step(200);
008 delay(1000);
009 }
**********
002行目で、「使うモーターは200ステップで1回転、使うピンはD8からD11だよ」としてる。
004行目で、「1分で60回転(1秒で1回転)の速度だよ」としてる。
007行目で、「200ステップ(1回転)回して」としてる。
だいぶ省略するけど、ユニポーラの場合はやってることはようはこんだけ。
**********
C:\Program Files\Arduino\libraries\Stepper\src\stepper.cpp
**********
185 switch (thisStep) {
186 case 0: // 1010
187 digitalWrite(motor_pin_1, HIGH); // 赤
188 digitalWrite(motor_pin_2, LOW);
189 digitalWrite(motor_pin_3, HIGH); // 黄
190 digitalWrite(motor_pin_4, LOW);
191 break;
192 case 1: // 0110
193 digitalWrite(motor_pin_1, LOW);
194 digitalWrite(motor_pin_2, HIGH); // 緑
195 digitalWrite(motor_pin_3, HIGH); // 黄
196 digitalWrite(motor_pin_4, LOW);
197 break;
198 case 2: // 0101
199 digitalWrite(motor_pin_1, LOW);
200 digitalWrite(motor_pin_2, HIGH); // 緑
201 digitalWrite(motor_pin_3, LOW);
202 digitalWrite(motor_pin_4, HIGH); // 青
203 break;
204 case 3: // 1001
205 digitalWrite(motor_pin_1, HIGH); // 赤
206 digitalWrite(motor_pin_2, LOW);
207 digitalWrite(motor_pin_3, LOW);
208 digitalWrite(motor_pin_4, HIGH); // 青
209 break;
210 }
**********
順にHIGHにしたりLOWにしたりしてるだけ。
ちなみにこのライブラリ、処理が終わるまで帰ってこない。
つまりモーターを回してる間は何の処理もできない。
当然、マルチタスクでもないしマルチスレッドでもないからこれではね。。。
少なくとも3軸のモーターを同時に動かす必要があり、これは使えないってこと。
だもんで、他の手を考える必要がある。
参考)バイポーラの場合
**********
165 switch (thisStep) {
166 case 0: /* 01 */
167 digitalWrite(motor_pin_1, LOW);
168 digitalWrite(motor_pin_2, HIGH);
169 break;
170 case 1: /* 11 */
171 digitalWrite(motor_pin_1, HIGH);
172 digitalWrite(motor_pin_2, HIGH);
173 break;
174 case 2: /* 10 */
175 digitalWrite(motor_pin_1, HIGH);
176 digitalWrite(motor_pin_2, LOW);
177 break;
178 case 3: /* 00 */
179 digitalWrite(motor_pin_1, LOW);
180 digitalWrite(motor_pin_2, LOW);
181 break;
182 }
**********
関連記事)Arduino関連
https://slilabo.com/?s=arduino
コメント