SSブログ

USB プロジェクト - 3ボタン・マウス [USB]このエントリーを含むはてなブックマーク#

HIDのサンプル・プログラムを改造して、 ついに、3ボタン・マウスを作りました。

概要

この作品は、デジタル入力のみを用いて作られた3-ボタン・マウスです。 マウスの移動には、四つのタクト・スイッチを使います。 移動速度は、ファームウェアにより自由自在です。 ボタンも三つ付いています。 場所が余ったので、LEDによるインジケータも付けました。 今は、ろくな仕事を与えられていません。

キーとLEDの割り当て

キーとLEDは、それぞれポートを一つずつ占有しています。

キーとLEDの割り当て
種別名前/位置ポート機能
キーPTA0ポインタを右に移動します。
キーPTA1ポインタを上に移動します。
キーPTA3ポインタを下に移動します。
キーPTA4ポインタを左に移動します。
キーボタン1PTA7マウスの左ボタンです。
キーボタン2PTA5マウスの右ボタンです。
キーボタン3PTA6マウスの中央ボタンです。
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は、単にボタンに連動して点灯するようになっているので、 もっと賢い使い方が出来ないか、考えています。

プロジェクト・アーカイブ


nice!(0)  コメント(0)  トラックバック(0)  このエントリーを含むはてなブックマーク#

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました