littleBits BLEモジュールとArduinoモジュールが歌うクリスマスソング（きよしこの夜）

この記事は<a href="http://qiita.com/advent-calendar/2016/littlebits" target="_blank">littleBits Advent Calendar 2016</a>の25日目の記事です。

デジタルハイク社様にお願いして取り寄せまして、<a href="https://littlebits.cc/bits/bluetooth-low-energy" target="_blank">littleBits BLEモジュール</a>を入手できたのでlittleBits BLEモジュールとArduinoモジュールにクリスマスソング（きよしこの夜）を歌ってもらいます。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/9f855dfb-2912-569c-b0f7-657c6160a4d5.png)

## littleBits BLEモジュールとは

littleBits BLEモジュールとは、先日発売された、スマホアプリからBLE経由でlittleBitsを操作できるモジュールです。

リリース記事としては以下が見つかりました（英文です）

* littlebits.cc
    * <a href="http://littlebits.cc/the-making-of-gizmos-gadgets-kit-2nd-edition" target="_blank">The Making of Gizmos &amp; Gadgets Kit, 2nd Edition</a>
    * <a href="http://littlebits.cc/tips-tricks/tips-tricks-bluetooth-low-energy-bit" target="_blank">Tips &amp; Tricks: Bluetooth Low Energy Bit</a>
    * <a href="http://littlebits.cc/bluetooth-low-energy-ble-bit" target="_blank">What is the Bluetooth Low Energy (BLE) Bit?</a>
* Engadget
    * <a href="https://www.engadget.com/2016/10/03/new-littlebits-kit-finally-gets-bluetooth-module/" target="_blank">New littleBits kit finally adds Bluetooth module</a>

## littleBits BLEモジュールのアクティベート

ということで、早速アクティベートします。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/186bc6a2-ffc7-c8db-fa51-a19bac97b6b1.png)

相変わらず、可愛いパッケージ。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/3f3d7d8c-c589-eda5-d6e9-8ed75b094f2f.png)

開封。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/9f855dfb-2912-569c-b0f7-657c6160a4d5.png)

技適マークが刻印されています！

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/9d386aae-e278-d98e-61e9-a134f6672392.png)

littleBits Androidアプリをインストールして。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/3bf3c4b2-6f65-0129-dcbf-2c1ed64dc65a.png)

安定の可愛いチュートリアル。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/dd80585c-de9e-d60a-c005-8daf08c5c11b.png)

ログインします。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/7c0ffb58-60a0-8124-cf57-125b540f154f.png)

ID/PASSWORDはlittleBitsアカウントを入れます。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/0f48c4c5-7e2b-4f9a-6bd3-b3c74e27cb93.png)

ログインできたらBit Controlsをクリック。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/52e12dda-0464-b8e8-f7b9-8ada6e50c322.png)

BluetoothをONにします。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/5956abd6-ae34-317b-353b-bde216c41c5f.png)

BLEモジュールを接続して待ち状態にします。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/50361af5-c87d-53b6-ce3a-3c94d9f071fe.png)

そうすると、アプリ側のBLE認識画面にBLEモジュールが表示されます。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/e2960afc-74b0-e2aa-ad1a-6342df007589.png)

認識されるとグリーンのランプに！

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/f0def420-ce65-31d5-ea47-660a89b60240.png)

あとはアプリ内でいろいろな操作が可能です！

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/fa6180d2-9e7e-e8dc-1e5b-a4d7ea90de6d.png)

このように、スマホシャッフルでオンになったり、スライダーで値がリアルタイムに変わったり、15と表示されているのはBLEモジュールに入ってきた値を表示します。直感的でいいですよね。

## きよしこの夜のメロディをつくる

さて、早速。<a href="http://www.1ft-seabass.jp/memo/2016/12/05/littlebits-arduino-tone-first-step/" target="_blank">littleBits Arduinoモジュールからシンセスピーカーモジュールで音を鳴らす基礎のメモ</a>の知見を元に、きよしこの夜のメロディをつくりましょう。

まず、きよしこの夜の楽譜を探します。

<a href="https://ja.wikipedia.org/wiki/%E3%81%8D%E3%82%88%E3%81%97%E3%81%93%E3%81%AE%E5%A4%9C" target="_blank">きよしこの夜 - Wikipedia</a>

Wikipediaを調べてみると、

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/985367b2-ee7b-a930-6f0c-077fbe0d9dbd.png)

楽譜が見つかりました。自分に合うものを探して、

<a href="http://www.geocities.jp/zattouka/GarageHouse/micon/Arduino/Melody/Melody.htm" target="_blank">arduino使い方：圧電スピーカでメロディを鳴らす</a>

こちらの記事を元にArduinoの音階に置き換えます。（結局、音を聞きながら最後は根性で微調整した気がします :laughing: ）

```c:SilentNight.ino
int tones[47]={392,440,392,330,392,440,392,330,587,587,494,523,523,392,
440,440,523,494,440,392,440,392,330,440,440,523,494,440,392,440,392,330,
587,587,698,587,494,523,659,523,392,330,392,349,294,262,0};

int currentTone = 0;
int currentPush = 0;

void setup() {
  pinMode(A0, INPUT);
}

void loop() {
  if( currentPush == 0 && digitalRead(A0) == HIGH ){
    tone(5,tones[currentTone]);  // 音を鳴らす
    currentTone++;  // 音階をすすめる
    if(currentTone>=47){
      currentTone = 0;
    }
    // Serial.println(currentTone);
    // Serial.println(tones[currentTone]);
    currentPush = 1;
  } else if( currentPush == 1 && digitalRead(A0) == LOW ){
    currentPush = 0;
  }

  delay(100);
}
```

**順々に音が流れていくシンプルな仕組みで、リズム感は操作する人のセンスにかかっている仕様。**

これをArduinoモジュールに書き込んで、

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/82d726d9-bf0a-4ba9-094c-69456b50f3f2.png)

あとは、POWERモジュール→BLEモジュール→Arduinoモジュール→スピーカーとつなぎます。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/de2cc751-fee5-f41a-0b47-af30edd3029a.png)

BLEモジュールはボタンモードで操作して、あとはリズムよくタップします。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/d8d9e532-ed94-ced7-7030-2c7d2fe4b7d2.png)

　↓
　↓
　↓
　↓

実際の動画です。→ <a href="https://www.youtube.com/watch?v=F6-aHoxSXhc&feature=youtu.be" target="_blank">【初期Ver】littleBits BLEモジュールとArduinoモジュールが歌うクリスマスソング（きよしこの夜） - YouTube</a>

私のリズム感が悪いのか、なんかつたない・・・？

いやいや、 **Arduinoモジュールを動かすコードで同じ音が続いたときに、ところどころつまづいていますね。**

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/f675419a-c0fb-e9d7-9daa-982e31c650e1.png)

楽譜上、同じ音が続いているときに、音が切れていないので、続いているように聞こえない（＝ただの長音になってしまう）ようです。

## ブラッシュアップ

ということで、続いているように聞こえるよう、無音を少しだけ入れるようにします。

```c:SilentNightBrushUp.ino
int tones[47]={392,440,392,330,392,440,392,330,587,587,494,523,523,392,
440,440,523,494,440,392,440,392,330,440,440,523,494,440,392,440,392,330,
587,587,698,587,494,523,659,523,392,330,392,349,294,262,0};

int currentTone = 0;
int currentPush = 0;

void setup() {
  pinMode(A0, INPUT);
}

void loop() {
  if( currentPush == 0 && digitalRead(A0) == HIGH ){
    // 同じ音階のときに空きを作るため無音delay
    tone(5,0);  
    delay(50);  // 同じ音階のときに空きを作るため無音delay
    // 音を鳴らす
    tone(5,tones[currentTone]);
    // 音階をすすめる
    currentTone++;
    if(currentTone>=47){
      currentTone = 0;
    }
    // Serial.println(currentTone);
    // Serial.println(tones[currentTone]);
    currentPush = 1;
  } else if( currentPush == 1 && digitalRead(A0) == LOW ){
    currentPush = 0;
  }

  delay(100);
}
```

　↓
　↓
　↓
　↓

実際の動画です。→ <a href="https://www.youtube.com/watch?v=8Y6y74734Cw&feature=youtu.be" target="_blank">【完成】littleBits BLEモジュールとArduinoモジュールが歌うクリスマスソング（きよしこの夜） - YouTube</a>

ちゃんと音の区切りにキレでて、続いているように聞こえるようになりました！

このように、曲を鳴らせられるくらいBLEモジュールのレスポンスはとてもよいので、アプリと連動させていろいろな反応をさせられると、littleBitsでの制作が一層楽しくなりそうですね。また、Arduinoモジュールを経由すれば、PCと経由で、インターネット上の何かの反応とも連携できるので面白そうです。

それでは、よきクリスマスを。