USB プロジェクト - 3ボタン・マウス [USB]
HIDのサンプル・プログラムを改造して、 ついに、3ボタン・マウスを作りました。
概要
この作品は、デジタル入力のみを用いて作られた3-ボタン・マウスです。 マウスの移動には、四つのタクト・スイッチを使います。 移動速度は、ファームウェアにより自由自在です。 ボタンも三つ付いています。 場所が余ったので、LEDによるインジケータも付けました。 今は、ろくな仕事を与えられていません。
キーとLEDの割り当て
キーとLEDは、それぞれポートを一つずつ占有しています。
種別 | 名前/位置 | ポート | 機能 |
---|---|---|---|
キー | 右 | PTA0 | ポインタを右に移動します。 |
キー | 上 | PTA1 | ポインタを上に移動します。 |
キー | 下 | PTA3 | ポインタを下に移動します。 |
キー | 左 | PTA4 | ポインタを左に移動します。 |
キー | ボタン1 | PTA7 | マウスの左ボタンです。 |
キー | ボタン2 | PTA5 | マウスの右ボタンです。 |
キー | ボタン3 | PTA6 | マウスの中央ボタンです。 |
LED | 左/赤 | PTD4 | ボタン1のインジケータです。 |
LED | 中/黄 | PTD3 | ボタン3のインジケータです。 |
LED | 右/緑 | PTD2 | ボタン2のインジケータです。 |
キー入力にPTA2が使われていないのは、間違いではありません。 USBDEV基板上で10kΩの抵抗によってプルダウンされているため、 プルダウンタイプのキー入力には使えなかったのです。 LEDには、それぞれ1kΩの電流制限抵抗を付けています。
即興で作成したので、回路図は、存在しません。
プログラム
プログラムは、キーボードのフリをしていたプログラムをもとに改造を施しています。
レポート・デスクリプタ以外で変更があったのは、 インターフェース・デスクリプタに含まれるプロトコルIDが、 マウス・デバイスになったところです。
{ // Size of this Descriptor in Bytes sizeof(interface_descriptor), DT_INTERFACE, // Descriptor Type (=4) 0, // Number of *this* Interface (0..) 0, // Alternative for this Interface (if any) 1, // No of EPs used by this IF (excl. EP0) 0x3, // IF Class Code (0x03 - HID) 1, // Boot Interface Subclass Code 2, // IF Protocol Code (2 = Mouse) 0 // Index of String Desc for this Interface }, // end of InterfaceDesc
これ以外の部分は、すべてキーボード・デバイスのものと同じです。
キーボードのインジケータで使われていたエンドポイントを通じたデータ受信の部分は、 おそらく使われることはないだろうと思いましたが、そのまま残してあります。 エンドポイントを通じたデータの送信の部分は、 送信するデータ長が8バイトであったものを3バイトにしてあります。
#define RX0_SIZE (8) // Byte count of RX0 extern volatile byte Rx0Buffer[RX0_SIZE]; #define TX1_SIZE (3) // Byte count of TX1 extern volatile byte Tx1Buffer[TX1_SIZE];
改造のためのヒント
現在は、ポインタの動作が1ドットずつの超低速です。 キーを押しっぱなしにすると、加速していくような仕掛けをファームウェアに仕込むと もっとマウスらしくなるかと思います。
また、LEDは、単にボタンに連動して点灯するようになっているので、 もっと賢い使い方が出来ないか、考えています。
コメント 0