micro:bitのV2以降には本体に「マイク」がついています。
micro:bitを音声で操作できたらすごいのですが、それはちょっと難しそうなので、代わりに「拍手の回数」でmicro:bitを操作できるようにしてみました。例えば、拍手1回でメッセージ表示、拍手2回で音を鳴らす、ということができます。
プログラムは以下の通りです。
ためしに、何度か「拍手」をしてみてください。「拍手したよ」関数が呼び出され、画面に拍手の回数が表示されます。拍手してから2秒間に拍手した回数がカウントされます。もしあなたがこのプログラムを使用したい場合は、「拍手したよ」関数内で、回数に応じて、処理を実行すればOKです。
プログラムの説明
プログラムが行っている事は難しくありません。
変数「拍手回数」と「拍手中?」を作成してください。
- まわりの音がうるさくなったとき
- 拍手されたよイベントを発生させる
- 拍手されたよイベントを受け取ったとき
- 拍手回数をインクリメント
- (初回拍手時のみ) 拍手監視イベントを発生させる
- 拍手監視イベントを受け取ったとき
- 2000ミリ秒待って、拍手おわったよイベントを発生させる
- 拍手おわったよイベントを受け取ったとき
- 「拍手したよ」関数を呼び出す
- 拍手回数をゼロに戻す
イベント
今回、イベントを初めて利用してみました。イベントとは、micro:bitのボタンが押された、本体を揺さぶられた、などを伝える仕組みです。例えば、micro:bitのAボタンが押された時には、以下のイベントが発生します。
発生源:MICROBIT_ID_BUTTON_A
値:MICROBIT_BUTTON_EVT_CLICK
発生したイベントは「イベントが届いたとき」ブロックで受け取ります。例えば以下のようにすると、「ボタンAが押された時」ブロックと同じことが実行できます。
このようにイベントはmicro:bitのシステム内でも多様されていますが、プログラムでも自由に使用することができます。
イベントについての詳細はこちら。
※ただし、このページによると、発生源(event source)は、「ランタイムで既に使用されているソースIDは使用しないように」と記載されています。
※また、「予約済みのソースIDの完全な表については、messageBusページを参照してください。」とありますが、そんな表はどこにもありません。検索しましたが、完全な表はこちらにあり、ページ内「ID」で検索すればよいそうです。
今回、発生源として「MICROBIT_ID_IO_P0」を使用しました。これは、上記注意事項に反しています。しかし以下のように考え、今回は使用しました。
- micro:bitのP0端子には何も接続していないため
- プログラムのサンプルを見やすくするため(IDを独自に定義すると、変数を増やす必要がある)
おわりに
作ってみましたが、意外と認識精度が良いので驚きました。必要に応じて「うるさいかどうかのしきい値」を変更して、お使いください。
これで、作ったラジコンの操作できないか、挑戦してみようと思います。