Arduino MEGA2560買ったから遊んだ

2019/9/20 訂正:writing_hand:：Arduino MEGA2560だと思っていたのですがどうやらArduinoではなく互換機だったようです。本家よりも安価なのと色が違うらしい…？

先日ノリと勢いで`Arduino MEGA2560`という開発ボードのスターターキットを購入したのでレポートです。
![iOS の画像 (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439548/03c92134-fd16-8850-2f69-61dcaa56ab4e.jpeg)
パッケージがかわいい。

Arduino MEGA2560はArduino Unoの上位互換で、メモリやI/Oを増量したものらしいですが私はArduino Unoも全く触れたことがないので違いはあまりよくわかってないです。

中身はこんな感じで色々はいってました。
![iOS の画像 (5).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439548/80ae652e-9c29-9d6a-4439-411d42fcde3f.jpeg)

##とりあえず開発環境を整えてみる
Arduino MEGA2560を使うのは`Arduino IDE`というものをダウンロードしてこなければならないらしいです。
Arduino IDEは[ELEGOOの公式サイト](https://www.elegoo.com/)からダウンロードできました。
チュートリアルも同じページにあります。親切。

Arduino IDEをインストールして開くとこんな感じのアプリが起動します。
<img width="1437" alt="スクリーンショット 2019-09-18 9.38.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439548/476abffa-cc24-629f-a84e-33ebb01bb279.png">
ツールから自分の使う開発ボードに合ったものを選択します。
<img width="1437" alt="スクリーンショット 2019-09-18 9.40.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439548/e5dd5163-c0dc-54da-ec9a-5c48db72ee70.png">

開発ボードをパソコンにUSBで接続します。
![iOS の画像 (3).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439548/17d68eba-a125-cd1b-5a24-04b065e61048.jpeg)
接続するとすぐに緑色のランプが点灯します。
これで開発環境は整ったはず。

##動作確認をしてみる
Arduino IDEにはいくつかコードのテンプレートが用意されています。
ファイルのスケッチ例からBlinkを選択してみましょう。
<img width="511" alt="スクリーンショット 2019-09-18 9.45.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439548/92f0f9b7-ce7b-dacc-5940-2eeb913c9dba.png">
<img width="1439" alt="スクリーンショット 2019-09-18 9.47.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439548/2da2b405-ec2d-9383-586b-2b7d40007bbf.png">
Blinkのテンプレートが表示されました。

```cpp

void loop()
```
の部分にLEDランプが1000ミリ秒間隔でオンオフが繰り返されるというコードが書かれています。
コードはこのままで、右上の✓マークから検証、→マークで開発ボード側に書き込みを行います。
開発環境が問題なく整っていれば、これで開発ボードのオレンジ色のランプがチカチカと点滅するはずです。
`delay`の数字を大きくしたり小さくしたりコードを書き換えて、再度ボードに書き出してみればLEDランプの点滅の間隔が変更されます。

##パッシブブザーを使って遊ぶ
開発環境が問題なく整っていることが確認できたので、次は`ブレッドボード`を使ってみます。
ブレッドボードは電子回路の実験や試作をする時に使う板で、はんだ付けをしなくても回路が作れちゃうすごいやつです。便利。
初心者らしく、今回はパッシブブザーを使ってコードに書いた音を鳴らしてみようかなと思います。

使う道具はこちら。
![iOS の画像.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439548/36de1564-52eb-9867-b01d-3fbad8637344.jpeg)
ブザー思ったよりだいぶちっちゃい。
小指の先くらいのサイズです。なくさないように気をつけましょう。

こんな感じで回路を組みました。
![Untitled Sketch_ブレッドボード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439548/a74a13fe-5f88-72fd-f41a-86e7ab07c387.png)
![iOS の画像 (4).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439548/bfb7c0d5-e361-ae4c-69e5-4ffe432a5774.jpeg)

とても簡単でいかにも初心者向けでいいですね。パッシブブザーはプラスとマイナスが明確に決まってるやつととくに決まってないやつの二種類があるみたいですが、スターターキットに付属されていたやつはちゃんと極性があるようでした。

ブザーの開始ピンはどこからでも問題ないですが、この後コードを書く時に指定してあげないといけないのでどこにピンを刺したのかきちんと見ておきましょう。(今回は13ピンからスタートしてます。)
GNDに接続して準備完了です。

コードを書いていきます。
ブザーは

```cpp
tone( 開始ピン番号 , 　周波数(鳴らす音) , 　音の長さ)
```
という感じで書けば鳴るらしいです。開始ピン番号は今回は１３です。ドの周波数は262らしいので、ブザーからドの音を鳴らすには

```cpp
void setup() {
}

void loop() {
     tone(13,262,1000) ;
}
```
という風に書けばいいわけです。
書き方がわかったので試しに音階を作ってみます。

Arduinoのコードでは定数は`#define`で定義するらしいです。
最初にドレミファソラシドの定数を作ります。

```cpp
#define C  262 //ド
#define D 294 //レ
#define E  330 //ミ
#define F 349 //ファ
#define G  392 //ソ
#define A  440 //ラ
#define B 494 //シ
#define C_high  523 //ド
```
作った定数を配列に入れます。

```cpp
int scale[] = {C, D, E, F, G, A, B, C_high};
```
`setup()`は何も書かなくて大丈夫です。
`loop()`でfor文を使って一定間隔で音がなるようにコードを書きます。

最終的なコードはこのような感じになりました。

```cpp
//音を定数に
#define C  262 //ド
#define D 294 //レ
#define E  330 //ミ
#define F 349 //ファ
#define G  392 //ソ
#define A  440 //ラ
#define B 494 //シ
#define C_high  523 //ド

//ピンの番号
int pin = 13;

//音階を配列に
int scale[] = {C, D, E, F, G, A, B, C_high};
//音の間隔
int duration = 200;

void setup() {
}

void loop() {
  
  //演奏
   for (int i = 0; i < 8; i++) {
    tone(pin, scale[i],duration);
    delay(duration);
   }
   
  //演奏終了後の余白
  delay(1000);
}
```

ボードに書き込んでみて、正しくパッシブブザーから音が出ていれば完成です。

##参考
[ELEGOO](https://www.elegoo.com/)
[Ardiuno doc](https://fabkura.gitbooks.io/arduino-docs/)
[Arduino 日本語リファレンス](http://www.musashinodenpa.com/arduino/ref/index.php)