MESHを使ってディスプレイ表示(写真・動画)をする方法

#やりたいこと
MESH*のアクションとして、ディスプレイ表示を行う
<img src="https://qiita-image-store.s3.amazonaws.com/0/159447/5a68e02b-ad28-5ead-5717-08904a0ec63f.gif" width=100%>

↓実際にやってみた動画はこちら(動画リンクが上手くできていなかったので修正　2017/01/14)↓
- [MESHを使ってディスプレイ表示(写真・動画)をする方法](https://www.youtube.com/watch?v=0VOKI-Uftnc)

*MESHとは、小さな便利を形にできる、ブロック形状の電子タグです。
- [MESH：小さな便利を形にできる、ブロック形状の電子タグ](http://meshprj.com/jp/)

#必要なもの
・MESHアプリ用スマートフォン
・トリガーに利用するMESHタグ(今回は、動きタグとボタンタグを使用)
・GPIOタグ
・Arduino Leonardo
・usb-miniusbケーブル
・Power Point
・表示機器(PC&モニター or PowerPointが入ったスマートフォン)
・OTGケーブル(USBホストケーブル、スマホで表示する場合のみ必要)
・ジャンピングケーブルなど(MESHとArduinoの配線に必要なもの)

#HOW TO
MESHを使って簡易プロトタイプを作成しているといるとアクションとして、ディスプレイ表示をしたい事が度々あったのでその方法をここにまとめておきます。ソフトを利用できるユーザが多いPowerPointと組み合わせた方法になります。
##システム構成図
MESHタグの部分は好きなタグに変更可能です。

![構成図(mesh-arduino-powerpoint).png](https://qiita-image-store.s3.amazonaws.com/0/159447/88c5178a-37db-ba66-ea97-610039de00f3.png)

##Arduino Leonardoに書き込むプログラム
GPIOから送られる信号を「数字キー + ENTERキー」に変換して、PowerPint側に送ります。
プログラムを書き込む際には、ツール > ボードから「Arduino Leonardo」を選択し、正しいシリアルポートを選択してください。

```arduino:mesh_arduino_powerpoint.ino
#include <Keyboard.h>

#define MESH_DOUT_PIN_01 7
#define MESH_DOUT_PIN_02 6
#define MESH_DOUT_PIN_03 5

int mesh_val[3] = {0, 0, 0};

int flag = 0;
int pre_flag = flag;

void setup() {
  // put your setup code here, to run once:
  pinMode(MESH_DOUT_PIN_01, INPUT_PULLUP);
  pinMode(MESH_DOUT_PIN_02, INPUT_PULLUP);
  pinMode(MESH_DOUT_PIN_03, INPUT_PULLUP);

  Keyboard.begin();

  delay(5000);
}

void loop() {
  // put your main code here, to run repeatedly:
  mesh_val[0] = digitalRead(MESH_DOUT_PIN_01);
  mesh_val[1] = digitalRead(MESH_DOUT_PIN_02);
  mesh_val[2] = digitalRead(MESH_DOUT_PIN_03);

  flag = calFlag() * 2;

  if (flag != pre_flag) {
    if(flag < 10){
      Keyboard.press('1' + flag);
    }
    else{
      Keyboard.press('1');
      Keyboard.releaseAll();
      delay(100);
      Keyboard.press('1' + flag % 10);
    }
      delay(100);
    Keyboard.press(KEY_RETURN);

  }

  delay(100);
  Keyboard.releaseAll();
  pre_flag = flag;
}


int calFlag(){
  int ret_val = 0;
  ret_val = pow(2, 2) * mesh_val[2] + pow(2, 1) * mesh_val[1] + pow(2, 0) * mesh_val[0];
  return ret_val;
}
```
##PowerPoint
PowerPointのプレビューモードには「数字キー+Enter」で指定のページに遷移するショートカットがあり、
そのショートカットキーをArduinoから送るようにしています。
仕組みとしては、奇数ページにショートカットキーで遷移して、0秒で次のページに切り替えるという処理を組み込む事で、結果的に偶数ページが表示されるようになっています。そうすることで、再度動画・音楽・アニメーションなどの再生が可能になります。

下記にこのプログラム用のPowerPointのテンプレートをUPしてありますので、ご利用の際はダウンロードしてください。
https://drive.google.com/file/d/0B1pztzhLU2bNVkROMWg1anBLZGM/view?usp=sharing
注意事項は各ページのノートに記載しています。

下図のように奇数ページは利用せず偶数ページのみご利用してください。
![powerpoint_sample (2).png](https://qiita-image-store.s3.amazonaws.com/0/159447/c28d7387-69e2-e88b-e338-59c286f1df67.png)
・UIを作る際は、アニメーションの追加をしタイミングを「直前の動作と同時」を選んでください。
・動画・音楽を自動再生するには、アニメーションで再生を追加して、タイミングを「直前の動作と同時」を選んでください。

##MESHレシピ
下図のレシピだと分かりにくいですが、トリガータグから3つのGPIOタグ(DOUT1-3)に繋がっています。
GPIOタグのDOUT1-3ピンのHIGH・LOWの組み合わせることで、Arduinoに信号として送ります(最大8パターン)。
送られた信号は結果的に下記の奇数ページの遷移に対応しています。
![meshレシピ.png](https://qiita-image-store.s3.amazonaws.com/0/159447/a3ba7e01-f582-f3c1-6f44-fec2bff08bdf.png)

##スマートフォンで利用するには
OTGケーブルを利用して下図のように、繋げてください。
One driveで共有すればPCで編集したデータをスマートフォンで再生できます。
データサイズが大きいと上手く動作しない場合があるので、ご注意ください。
![P1080004.PNG](https://qiita-image-store.s3.amazonaws.com/0/159447/e8b52e62-e121-e1cc-f3e1-d15db6195275.png)