![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
arduinoでステッピングモーターを回すスケッチを書きました。
ネットで拾ったスケッチを自分の工作用にアレンジしてみたものですが、思った通りに実行されません。
というか、途中で行き詰りました。
どのようにすれば希望通りの動きをしてくれるでしょうか?
スケッチは以下の通りです。
#include <Stepper.h>
#define MOTOR_1 (4) // blue
#define MOTOR_2 (5) // pink
#define MOTOR_3 (6) // yellow
#define MOTOR_4 (7) // orange
#define SW (3)
#define MOTOR_STEPS (2048)
#define INTERVAL 5 //最初の戻りスピード、下げれば速度は上がるが2以下だと脱調する
// ライブラリが想定している配線が異なるので2番、3番を入れ替える
Stepper myStepper(MOTOR_STEPS, MOTOR_1, MOTOR_3, MOTOR_2, MOTOR_4);
void setup() {
pinMode(0,INPUT_PULLUP); //0ピンを入力に設定し、内蔵プルアップ抵抗を有効にする
pinMode(SW, INPUT);
myStepper.setSpeed(15); //回転速度の設定
}
void loop() {
while(digitalRead(0)==LOW); { //0ピンのスイッチがOFFの間はモーターは回転 ・・・①
// 1ステップ目
digitalWrite(4,HIGH);
digitalWrite(6,LOW);
digitalWrite(5,LOW);
digitalWrite(7,HIGH);
delay(INTERVAL);
// 2ステップ目
digitalWrite(4,LOW);
digitalWrite(6,HIGH);
digitalWrite(5,LOW);
digitalWrite(7,HIGH);
delay(INTERVAL);
// 3ステップ目
digitalWrite(4,LOW);
digitalWrite(6,HIGH);
digitalWrite(5,HIGH);
digitalWrite(7,LOW);
delay(INTERVAL);
// 4ステップ目
digitalWrite(4,HIGH);
digitalWrite(6,LOW);
digitalWrite(5,HIGH);
digitalWrite(7,LOW);
delay(INTERVAL);
}
// 停止動作 0ピンのスイッチがONになったらモーターを停止 ・・・・・・②
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
delay(1000);
///////////////////////////////////////////////////////////////////////////
// スイッチを押して離すとモーターを45°回転させる 1ステップ=0.17578125°
while (!digitalRead(SW)) { delay(50); } //・・・・・・③
while (digitalRead(SW)) { delay(50); }
myStepper.step(256); //・・・・・④
// 静止時の負荷が無く勿体無いので電流を止める
stopMotor(); //・・・・・・⑤
}
// モーターへの電流を止める
void stopMotor() {
digitalWrite(MOTOR_1, LOW);
digitalWrite(MOTOR_2, LOW);
digitalWrite(MOTOR_3, LOW);
digitalWrite(MOTOR_4, LOW);
}
//終わり
というものです。
希望の動作としては、まず、①のwhile文で0ピンのスイッチ入力の有無を調べます。
入力がなければモーターを回転させ再びスイッチ入力を調べます。
入力があれば②の部分を実行し、モーターを停止します。
②を実行し、モーターを停止したら次に③の2つのwhile文を実行し、SWのスイッチがONされてOFFになったら④を実行しモーターを指定の角度分回転、指定の角度分回転したら⑤で停止。
停止したら再び③に戻り、SWのスイッチ入力を待つ。
といった動作です。
(①②は一度だけ実行、その後は③④⑤をスイッチ入力で繰り返す。ということです。)
①②の部分だけ、または③④⑤の部分だけでそれぞれ別に書き込んで動作させるときちんと動いたので、後はこれをいかにして合体させるかだと思うのですが、どこを直せばよいのか分かりません。
{ }の使い方でしょうか?
詳しい方、よろしくお願いいたします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
>①②は一度だけ実行、その後は③④⑤をスイッチ入力で繰り返す。
ということです。それなら③以降をfor(;;)なりwhile(1)なりで無限ループさせる。
この関数loop()を繰り返し呼び出せば①②を実行するのは当たりまえです。
No.2
- 回答日時:
「loop」という名前の関数の中身を繰り返しているんじゃない? 「loop」って名前であることからして, そう考えるのが妥当だと思うんだけど.
で, 多分「setup」はそのループに入る前に 1回だけ実行するんじゃないか, と.
「問題が起きたときに自分で解決できるようになりたい」んだとしたら, 見よう見真似で書くだけじゃなくちゃんとした資料を読むことも必要だよ.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 コードを書いたのですが上手く実行出来なかったです。どこが間違ってますか? 【作成したいもの】 1 2022/05/04 11:36
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語 ① 5秒間 1秒間隔で点滅を繰り返す ② 3秒間 0.5秒間隔で点滅を繰り返す ①→②→①→ 5 2022/05/03 23:37
- 英語 英語についてです。 write と write it down の違い 教えてくれませんか? 調べた 6 2022/09/10 16:51
- ドライブ・ストレージ HDDのチェック方法 6 2022/05/04 09:49
- スピーカー・コンポ・ステレオ ナショナル真空管ラジオBX-275音質切替スイッチでの異音について 7 2023/03/18 16:16
- 英語 一般を表す言葉を補って能動態で受動態を書き換える 5 2022/08/14 16:13
- 高校 簡単な英語です。 Son : Mom! Can you get me something to ( 5 2023/06/11 21:46
- デジタルカメラ 手持ちのRICOH GR DigitalをWebカメラとして使いたい。 2 2023/07/25 07:54
- 英語 Digital protocol allows for a completely virtual p 1 2022/10/06 10:47
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
if文の条件に関数が入ってる場...
-
C#で他のPCのサービスの起動...
-
onedriveで同期解除をしたら、...
-
vlan internal allocation poli...
-
TXTファイルを上書き保存する前...
-
沢山のフォルダにあるファイル...
-
コマンドプロンプトでデスクト...
-
USBデータの消失
-
outlook2019がPCから消えた
-
共有しているファイルを削除し...
-
データ移動時にポップアップメ...
-
vbaでIEの名前を付けて保存(A)...
-
ごみ箱から元に戻したファイル...
-
ls であるファイル以外を表示し...
-
フォルダに入っているファイル...
-
バッチファイルの変数引継ぎに...
-
WMP12でmp3が再生できない
-
NETBIOSドメイン名の変更について
-
Edgeでダウンロード状況表示画...
-
上書きしてしまったtxtファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
if文の条件に関数が入ってる場...
-
VB.NETで他のEXEを実行させる
-
C#で他のPCのサービスの起動...
-
再質問 コンボボックス リス...
-
ファイル名の日付について教え...
-
Word・Excelの「Ctrl+Y」につい...
-
Schemeで複数の関数を連続で実...
-
python スクリプトファイルの実行
-
WindowsでPythonで外部コマンド...
-
onedriveで同期解除をしたら、...
-
vlan internal allocation poli...
-
沢山のフォルダにあるファイル...
-
teratarmでコマンド入力すると...
-
共有しているファイルを削除し...
-
TXTファイルを上書き保存する前...
-
マイドキュメントのフォルダの...
-
YAHAMA RTXシリーズのコマンド...
-
エクセルVBAについて
-
WindowsからSSHでサーバーにあ...
-
読み取り専用ファイルを上書き...
おすすめ情報