6. 操作はどうする?
ディスプレイの次は、操作のためのキーです。 曲の再生/停止や選曲の操作イメージを決めなければいけません。 やっぱりiPodは良くできていて、必要最小限のスイッチ、 わかりやすいユーザインタフェースにはかないません。 あのホイールをぐりぐり回す快感…。 まあ、気分だけでもまねてみるかと、 ロータリーエンコーダを使ったボリュームノブをつけることにしました。 これで音量や選曲などの主な操作をできるようにします。 キースイッチは、小さめのものを4つつけておいて、 役割は後でソフトを作りながらおいおい考えて行くことにしました。 ソフトで機能を実現できるのはこういう時に柔軟に対応できるから嬉しい。
下の方の黒い軸がついてるやつが適当に選んで買ったロータリーエンコーダです。 もっと軽く回るものを想像していましたが、以外と動きが重いものでした。 まあ触っただけで動いてしまうことがないからこの方がいいかと無理矢理納得して先へ進みます。
《 ← 前へ 》 《 次へ → 》

Key Switch の接続
1. 回路図
ロータリーエンコーダは、 内部に2つのスイッチがあって回転に応じて90°の位相差でON/OFFする一般的なものです。 キースイッチおよびエンコーダのスイッチの状態が変化したら割り込みをかけて、 割り込み内で値をセンスするとともにその状態を打ち消すための値を回路に出力します。 回路の方では、実際のスイッチの値と割り込み関数で出力された値のXORをとることでIRQの要求がクリアされます。 こうすることで、スイッチ/エンコーダの状態が変化したときだけ割り込みイベントが発生するようになります。
2. デバイスドライバ
H8のIRQピンのいくつかはCSピンと共用となっていて数があまり取れないので、 MP3モジュールの割り込みとスイッチ系の割り込みを混ぜて使う回路になっています。 そのため、MP3モジュール、トーンコントロール付きアンプ、 キースイッチの全てを一つのデバイスドライバで管理するようにしました。 /dev/mp3 へのデータ書き込みが MP3モジュールへのデータ書き込み、 /dev/mp3 からのデータ読み出しがスイッチ系の状態変化の取得、 /dev/mp3 に対する I/O control でトーンコントロールアンプの制御、 というように機能を割り当てました。 /dev/mp3 の Major number は 253 を使いました。
    % mknod mp3 c 253 0
    

pollハンドラを実装すると、 selectシステムコールでイベント待ちを実現できるので、 ユーザアプリ側でMP3データの書き込みとスイッチのセンスを並列に行う処理を見通し良く書けます。

《 ← 前へ 》 《 次へ → 》