この子の名前ですが,「中断ボタンボックス」といいます.赤いボタンが「中断ボタン」です.
ということは,何かを「中断」するためのボタンということなのですが,
OSからはこの子は実はHIDデバイスに見えます.何のHIDデバイスかというと…
「キーボード」です.
しかも,この子が送れる文字はただ一つ,「Esc文字」です.
つまり「エスケープキーだけがついているキーボード」がこの箱の正体,というわけです.
以前にこんな工作をしたのですが,じつはその続き,というか,仕様の追加でこのような工作が必要になりました.
これはわたしの職場にある,ある展示装置のための付加装置です.その展示装置とは,ジオラマ模型と,照明装置と,タッチパネルディスプレイを備えたパソコンとから構成されています.
展示装置の目的は,ジオラマ模型(昔の街並みなのですが)の各部分を観客に分かりやすく説明することで,あらかじめ,模型の見どころにスポット照明が当たるようになっています.そのスポット照明は,コンピュータ仕掛けの照明装置でコントロールされ,何番のスポットを何秒照らせ,というプログラムに従って動きます.
一方,タッチパネルディスプレイには,画面を触れて説明をスタートさせる働きと,
参考となる資料を示しながら説明をすすめていく役目があります.この画面はPowerPointで作られています.
前にもぐちをこぼしたとおり,説明を始めるときに,照明装置の方に合図を送ったら,あとはそれぞれが時間を守って説明画面を出したり,スポットライトをコントロールしなければなりません.楽といえば楽ですが,ごぞんじのとおり,PowerPointのスライドショーの時間指定はとてもいいかげんで,数秒狂うのは当たり前です.となると,ライトとタイミングがずれて見るに堪えないものになります.そこで,どうせ照明装置に合図を送る部分も作らないといけないから,ということで,VB.NETで時間管理を行うプログラムを書き,PowerPointがこのプログラムから決められた時間で画面を切り替える指令を受けてスライドショーをすすめていく,というしかけになっています.
説明は,最初にボタンで選択することで4ヶ国語の説明を選ぶことができます.どの番組も3分40秒ほどの同じ長さで作ってあって,ナレーションの音声も決められた時間で作るなどして時間をそろえる工夫をしています.これは照明装置側のコントロール情報の設定が大変なため,1種類の照明パターンですませるための(費用もだいぶ違うのでw)苦肉の策です.
さて,照明装置に指令を送るためのリレーボックスを自作するなどしてがんばったこの装置なのですが,実際に運用を始めてみると困った問題が…とくに小学生に多いのですが,表示された説明を見ずに適当に画面をたたく,それで番組が始まってしまいます.で,日本語じゃない説明が始まってしまって,たたいた本人はつまらないのでどこかに行ってしまう.じゃあ番組再生を中断すればいいじゃないか,と思われるでしょうが,この装置を企画した先生は,「最後までちゃんと見てほしいから中断の仕掛けはつけないでほしい」とたっての希望でしたので,あえて中断の仕掛けを設けなかったという経緯があります.
しかし,現場のスタッフからは,頻繁にそういうことが起きるので,何とかしてほしいという報告ががんがん上がってきます.おそらくスタートのボタンを押してすぐに番組が始まるという構造が悪いのだろうということで,いまインターフェイスの見直しを別途すすめている(専門家に相談している)ところなのですが,とりあえず番組を中断する仕掛けをなんとかつけてください,ということで,中断ボタンボックスの出番になりました.
PowerPointのスライドショーを中断するときはEscキーを押しますね.制御プログラムからPowerPointを呼び出している時もEscキーを押すと再生は中断され,中断されたよという情報を制御プログラムで受け取ることができます.そこで,制御プログラム側では,スライドショーが強制終了した場合は,照明装置にプログラムの中止信号を出し,照明がもとにもどるまでの数秒間は画面操作ができないようにロックするようにしました.照明装置からプログラム中断指令用の線を出してもらう必要がありますが,これはそれほどお金がかからないということで,あとは中断の仕掛けをどう組み込むかということになりました.来館者に頻繁に中断ボタンを押させることはさせたくないので,中断のボタンは来館者から見えないところに取り付けて,展示場のスタッフがそっとボタンを押して番組再生を止める,ということにしました.説明画面に常に中断ボタンを出すことも考えましたが,画面デザインをやりなおすのは困難でしたので(あとプログラムが難しくなるのもいやだったので)やめました.
こんなふうに秘密の場所にボタンは隠れています.しかし,めざとい子どもが見つけて押すかもしれません.そのため,ちょっと押しただけでは反応しないようにインターフェイスを考えることにしました.ボタンの押し方を知っている人だけが番組を止めることができる,ということです.
結果として,ソフトウェア側の更新は最小限ですませることができました.(半日で改造を終えることができた.)ボタン側のプログラミングも,24794のサンプルプロジェクト(AN2298)を参考にささっと作ることができました.圧電サウンダはPWM8で鳴らしています.周波数だけのことですからPWMである必要は全然ないですが.
中断ボタンのプログラムは…じゃmain.cだけでご勘弁ください.「main_090103.c」をダウンロード .動作の様子はこちらをどうぞ.「081219-110810.wmv」をダウンロード アドエス君で撮ったので音と画像がずれまくりですが,かすかにブザー音が聞こえるでしょうか?カチッという音が聞こえていますね.これはリレーボックスの動作音だと思います.中断信号を照明装置に送っています.
USBキーボードとしてみると,かなりへんてこりんな動作をしています.このボタンでEsc文字を送るのは忍耐が必要です.しかもいったん文字を送ったらしばらくロックをかけてボタンを受け付けないようにしています.しかし中断ボタンとしてはこれでまあいいだろうと.もっといいインターフェイスを工夫することもできるでしょうし,本体のプログラムに手を入れずできますから,タイミングの問題だけ気をつければ,かなり自由に作りこむことができます.
本人はなかなか面白くできたなあ,とにやにやしているのですが,PSoC工作としてはアナログ要素ゼロなのでうーむw.まあ,24794で手軽にHIDデバイス,ということでお許しください.
(完)w