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を探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETで他のEXEを実行させる
-
マシンをスタンバイの状態にし...
-
ファイル名の日付について教え...
-
エクセルでファイルの最終更新...
-
沢山のフォルダにあるファイル...
-
論文に載せるグラフを作成したい
-
マイドキュメントのフォルダの...
-
WindowsからSSHでサーバーにあ...
-
vlan internal allocation poli...
-
YAHAMA RTXシリーズのコマンド...
-
共有しているファイルを削除し...
-
FTP 転送コマンド
-
teratarmでコマンド入力すると...
-
onedriveで同期解除をしたら、...
-
vb.net(vs2008)でのグラフ作成...
-
Excel VBAで作成したマクロをxl...
-
ファイルのプロパティの属性の...
-
Ciscoルーター 対向機器のIPア...
-
サブディレクトリも含めて最新...
-
CPコマンドでファイルがコピー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで他のEXEを実行させる
-
if文の条件に関数が入ってる場...
-
C#で他のPCのサービスの起動...
-
再質問 コンボボックス リス...
-
WSHController/CreateScriptはa...
-
Word・Excelの「Ctrl+Y」につい...
-
シェルスクリプトに引数を渡す...
-
マシンをスタンバイの状態にし...
-
ファイル名の日付について教え...
-
コマンドプロンプトにてコマン...
-
コンボボックスのSelectedIndex
-
C++ arduinoのスケッチについて...
-
VBSでDBに接続する方法
-
VBAの乱数について質問
-
VBSでクエリを実行→クエリでテ...
-
vlan internal allocation poli...
-
エクセルでファイルの最終更新...
-
teratarmでコマンド入力すると...
-
TXTファイルを上書き保存する前...
-
YAHAMA RTXシリーズのコマンド...
おすすめ情報