タクトスイッチで音のモードを変えられるようにしたいのですがどうしてもわからなくて教えていただけないでしょうか。
3つのタクトスイッチをそれぞれ押すと”ド” ”レ” ”ミ”と鳴りもう一つのタクトスイッチを押すと3つの音が”ファ” ”ソ” ”ラ”と鳴るようにプログラムをしているのですが、切り替えに使うタクトスイッチの初めの切り替えはできたのですが、元に戻す時のプログラムがどうしてもわかりません。どんな仕組みにすればいいですか?
まだ始めたばかりでわからないことも多いのですが教えていただけないでしょうか。
作ったプログラム
void setup() { pinMode(A2,INPUT_PULLUP); pinMode(A3,INPUT_PULLUP); pinMode(A4,INPUT_PULLUP); pinMode(A5,INPUT_PULLUP); } int a = 0; int aqw[] = {262,294,330,349,392,440,494}; void loop() { if (digitalRead(A2)==LOW) tone(13,aqw [a],30); if (digitalRead(A3)==LOW) tone(13,aqw [a+1],30); if (digitalRead(A4)==LOW) tone(13,aqw [a+2],30); if (digitalRead(A5)==LOW) a=3; //ここからが分かりません }
試したこと
IFやWHILE、FORなどでやってみたりしたのですが、A=1にした時何を条件にして切り替えれば良いのか分かりません.
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
こんなかなー。
Arduino
1void setup() 2{ 3 pinMode(A2,INPUT_PULLUP); 4 pinMode(A3,INPUT_PULLUP); 5 pinMode(A4,INPUT_PULLUP); 6 pinMode(A5,INPUT_PULLUP); 7} 8 9int a = 0; 10int aqw[] = {262,294,330,349,392,440,494}; 11 12void loop() 13{ 14 if (digitalRead(A2)==LOW) tone(13,aqw [(a * 3) + 0],30); 15 if (digitalRead(A3)==LOW) tone(13,aqw [(a * 3) + 1],30); 16 if (digitalRead(A4)==LOW) tone(13,aqw [(a * 3) + 2],30); 17 18 if (digitalRead(A5)==LOW) 19 { 20 a++; 21 if(a > 1) { a = 0; } 22 } 23}
投稿2018/03/26 14:22

退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

退会済みユーザー
2018/03/26 14:44

退会済みユーザー
2018/03/26 14:48 編集

退会済みユーザー
2018/03/26 14:56

退会済みユーザー
2018/03/26 15:00

退会済みユーザー
2018/03/26 15:01

退会済みユーザー
2018/03/26 15:02

退会済みユーザー
2018/03/26 15:04

退会済みユーザー
2018/03/26 15:17

退会済みユーザー
2018/03/26 15:18

退会済みユーザー
2018/03/26 15:20

退会済みユーザー
2018/03/26 15:21

退会済みユーザー
2018/03/26 15:22

退会済みユーザー
2018/03/26 15:24

退会済みユーザー
2018/03/26 15:27

退会済みユーザー
2018/03/26 15:28

退会済みユーザー
2018/03/26 15:29

退会済みユーザー
2018/03/26 15:29

退会済みユーザー
2018/03/26 15:30

退会済みユーザー
2018/03/26 15:30

退会済みユーザー
2018/03/26 15:31
2018/03/27 01:04

退会済みユーザー
2018/03/27 01:13
2018/03/27 02:03

退会済みユーザー
2018/03/27 02:47
2018/03/27 03:09

退会済みユーザー
2018/03/27 03:15

退会済みユーザー
2018/03/27 03:23
2018/03/27 03:49

退会済みユーザー
2018/03/27 03:57
2018/03/27 04:20

0
全部タクトスイッチですか? 「切り替え」用のスイッチは最初はトグルスイッチとかシーソースイッチの方がわかりやすいようにも思いますけれど。
タクトスイッチで「切り替え」をおこなうには、手を離すと接点も離れちゃいますから、「押されている」ことを調べても駄目で「押された」ことを検出して、押された瞬間だけ切り替え動作を行うことになります。
さて、「押された」ってどういうこと? 直前までは押されていなくて、今は押されている、ということ。
C++
1//setupとかは変更なし 2int prevA5=HIGH;//直前のA5の状態を記憶するための変数。最初は「押されていなかった」設定。 3void loop(){ 4 if (digitalRead(A2)==LOW) tone(13,aqw [a],30); 5 if (digitalRead(A3)==LOW) tone(13,aqw [a+1],30); 6 if (digitalRead(A4)==LOW) tone(13,aqw [a+2],30); 7 8 int curA5=digitalRead(A5);//プログラム中で何度もdigitalRead(A5)で状態を調べると、もしかしたら途中でスイッチの状態が変わってしまっていることもあるかも知れないので検査は一回だけにする 9 if ( (prevA5==HIGH) && (curA5==LOW) ){ //直前は押されていませんでした、そして今は押されています...つまり、スイッチが今まさに押されました、ということを検出する 10 if(a==0){//今までがa==0だったらaを3に、そうでなっかたらaを0に設定する 11 a=3; 12 }else{ 13 a=0; 14 } 15 delay(50); //簡易「チャタリング」避けで時間をおく 16 } 17 prevA5=curA5; //今の状態は、次の瞬間には「過去」になる 18} 19
投稿2018/03/26 14:33
編集2018/03/27 12:41
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

退会済みユーザー
2018/03/26 14:35

退会済みユーザー
2018/03/26 14:41

退会済みユーザー
2018/03/26 14:49

退会済みユーザー
2018/03/26 14:58

退会済みユーザー
2018/03/26 15:37

退会済みユーザー
2018/03/26 15:38

退会済みユーザー
2018/03/26 15:42

退会済みユーザー
2018/03/26 15:49

退会済みユーザー
2018/03/26 15:55

退会済みユーザー
2018/03/26 15:55

退会済みユーザー
2018/03/26 15:57

退会済みユーザー
2018/03/26 16:13

退会済みユーザー
2018/03/26 16:16

退会済みユーザー
2018/03/26 16:19

退会済みユーザー
2018/03/26 16:21

退会済みユーザー
2018/03/26 16:22

退会済みユーザー
2018/03/26 16:22

退会済みユーザー
2018/03/26 16:25

退会済みユーザー
2018/03/26 16:26

退会済みユーザー
2018/03/26 16:29

退会済みユーザー
2018/03/26 16:33

退会済みユーザー
2018/03/26 16:34

退会済みユーザー
2018/03/26 16:34

退会済みユーザー
2018/03/26 16:36

退会済みユーザー
2018/03/26 16:38

退会済みユーザー
2018/03/26 16:39

退会済みユーザー
2018/03/26 16:41

退会済みユーザー
2018/03/26 16:53

退会済みユーザー
2018/03/26 17:13

0
Arduinoはやったことありませんが、ブール型を利用すれば簡潔に記述できるのでは?
という内容で記述してみました。
Arduino 日本語リファレンス【ブール型】
Arduino 日本語リファレンス【true/false (論理レベルを定義する定数)】
あくまで、false=0 true=1 という値を取ればという前提ですが。
動くかどうかも、いや、コンパイルさえ通るかどうかも分かりませんけど。
Arduino
1void setup() { 2 pinMode(A2,INPUT_PULLUP); 3 pinMode(A3,INPUT_PULLUP); 4 pinMode(A4,INPUT_PULLUP); 5 pinMode(A5,INPUT_PULLUP); 6} 7boolean A5switch = false; 8int aqw[] = {262,294,330,349,392,440,494}; 9void loop() { 10 if (digitalRead(A2)==LOW) tone(13,aqw [(A5switch * 3) + 0],30); 11 if (digitalRead(A3)==LOW) tone(13,aqw [(A5switch * 3) + 1],30); 12 if (digitalRead(A4)==LOW) tone(13,aqw [(A5switch * 3) + 2],30); 13 if (digitalRead(A5)==LOW) { 14 delay(100); // バウンシング対策 15 A5switch = !A5switch; // ブール変数でオンオフ切替 16 }
投稿2018/03/27 02:06
総合スコア25430
0
ああ、スイッチは4つあるのね。
4つ目のスイッチ押したときに、交互にaを1と0にして、
aの値で3つのスイッチの動作を切り替えればいい
訂正。
きちんと配列で音の高さ変えるようにしてるのね。
そしたら修正は最後の a の代入のところで、
aが0だったら aに3を入れ、
aが0以外だったら、aに0を入れるようにすればいい
投稿2018/03/26 14:12
編集2018/03/26 14:19総合スコア88173
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

退会済みユーザー
2018/03/26 14:34

退会済みユーザー
2018/03/26 15:32

退会済みユーザー
2018/03/26 15:37

退会済みユーザー
2018/03/26 15:44

退会済みユーザー
2018/03/26 15:50

退会済みユーザー
2018/03/26 15:51

退会済みユーザー
2018/03/26 15:54

退会済みユーザー
2018/03/26 15:57

退会済みユーザー
2018/03/26 16:01

退会済みユーザー
2018/03/26 16:02

退会済みユーザー
2018/03/26 16:03

退会済みユーザー
2018/03/26 16:04

退会済みユーザー
2018/03/26 16:05

退会済みユーザー
2018/03/26 16:06

退会済みユーザー
2018/03/26 16:06

退会済みユーザー
2018/03/26 16:08

退会済みユーザー
2018/03/26 16:08

退会済みユーザー
2018/03/26 16:09

退会済みユーザー
2018/03/26 16:11

退会済みユーザー
2018/03/26 16:12

退会済みユーザー
2018/03/26 16:12

退会済みユーザー
2018/03/26 16:13

退会済みユーザー
2018/03/26 16:15

退会済みユーザー
2018/03/26 16:16

退会済みユーザー
2018/03/26 16:17

退会済みユーザー
2018/03/26 16:22

退会済みユーザー
2018/03/26 16:25

退会済みユーザー
2018/03/26 16:26

退会済みユーザー
2018/03/26 16:27

退会済みユーザー
2018/03/26 16:32

退会済みユーザー
2018/03/26 16:36

退会済みユーザー
2018/03/26 16:48 編集

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。