超ゆるゆる技術ブログ🌷

プログラミング勉強中です。

【Arduino】スイッチで音鳴らしてみた

スイッチ押して音鳴らす!

f:id:dd15038:20180801145418j:plain
タクトスイッチのボタンを押すと、音が鳴るしくみです。

プログラム

//タクトスイッチをデジタル2番ピンにつなぐ
const int switchPin = 2;
//スピーカーピンをデジタル12番ピンにつなぐ
const int speakerPin = 12;

void setup() {
  //タクトスイッチは入力用に
  pinMode(switchPin,INPUT);
 //スピーカーは出力用に設定
  pinMode(speakerPin,OUTPUT);
}

void loop() {
  //スイッチを押した時音が鳴るようにする
  while(digitalRead(switchPin) == LOW){
  }
  tone(speakerPin,262,500);//ド
  delay(500);
  tone(speakerPin,294,500);//レ
  delay(500);
  tone(speakerPin,330,500);//ミ
  delay(500);
}

これが、最終的なスケッチの形です。
基本は変わらず、タクトスイッチのつながるピンをデジタル2番ピンに、スピーカーのつながるピンはデジタル12番ピンにという設定を最初に描きます。
setup()関数では、タクトスイッチのピンは入力用になるように、スピーカーのピンは出力用になるように設定します。

で、loop()関数の中が一番のポイントでした。
while文を使い、スイッチが通電状態のときにスピーカーを鳴らす処理をするようになっています。

☆ここでちょっとwhile文について
そもそもwhile文というのは

while(条件){
文
}

という形の関数で、最初の()の「条件」に合わなくなるまで{}内の「文」の処理がなされ続けるという仕組みになっています。
今回のスケッチでは

  while(digitalRead(switchPin) == LOW){
  }
  tone(speakerPin,262,500);//ド
  delay(500);
  tone(speakerPin,294,500);//レ
  delay(500);
  tone(speakerPin,330,500);//ミ
  delay(500);}

と描かれているので、
スイッチが絶縁している、つまり押されていない「LOW」の状態に当てはまっていると、{}内には何も描かれていないので何も処理が起こりません。
しかし、ここでスイッチが押されて通電になると「HIGH」の状態になり、while文の条件に合わないためここの処理は飛ばされ、その後にあるtone()関数の処理が行われるようになっています。
こんな説明でおそらくあっているはず…。

回路図

f:id:dd15038:20180802005535p:plain
タクトスイッチは、電源の5Vピンと入力用のデジタル2番ピンとブレッドボードのGNDへつなぎます。
あ、タクトスイッチには抵抗をはさんでおきます。
抵抗が無いと、回路がうまく組まれないんです…。
スピーカーは、出力用のデジタル12番ピン、ブレッドボードのGNDにつなぎます。
そしてブレッドボードからは、ArduinoのGNDピンへつなぎます。

実際のようす

https://d15038-as.tumblr.com/post/176520154804/arduinoを使ってスピーカーを鳴らす-arduino

初めてなのでうまくできてるかわかりませんが、今回tumblrを使って動画を埋め込んでみました。
スイッチを押したら、「ドーレーミー」というふうに音が鳴っているのが分かると思います。

感想

前々回くらいの記事で、スイッチを押してスピーカーが鳴るようにしたいというようなことを書いていた気がするのですが、今回それができてよかったなって思います。
思ったよりこれが出来上がったとき楽しく感じました。