2

PS/2 マウスからモーション データを取得するために、このメッセージの下部にあるマウス スケッチ (他の誰かによって書かれています) を使用しています。このマウスの仕様を確認したところ、PS/2 互換であることがわかりました。ただし、実行すると、「mouse.write(0xff); // reset」という mouse_init の最初の行で停止するように見えます。これは、ps2.h 内の関数の呼び出しです。ps2.h は 2008 年から存在し、多くのプロジェクトで使用されているので問題ないと思いますが、PS/2 マウスとして接続する USB マウスには、このライブラリにはなかった独特の機能があるのではないかと考えていました。に対応するように設計されています。これに光を当てる可能性のある経験はありますか?

私は、mouse.write が Genius マウスの状態を変更していることを確認できましたが、ホストがデータの送信を続行できるように、マウスがクロック状態を低くするはずのポイントで停止します。mouse.write が開始される前は、クロック状態は低いですが、ホストによって数行だけ mouse.write にプッシュされ、そこにとどまります。マウスはそれを再び下げることはありません。問題が何であるかについての考えは大歓迎です。

#include <ps2.h>

/*
 * an arduino sketch to interface with a ps/2 mouse.
 * Also uses serial protocol to talk back to the host
 * and report what it finds.
 */

/*
 * Pin 5 is the mouse data pin, pin 6 is the clock pin
 * Feel free to use whatever pins are convenient.
 */
PS2 mouse(6, 5);

/*
 * initialize the mouse. Reset it, and place it into remote
 * mode, so we can get the encoder data on demand.
 */
void mouse_init()
{
  mouse.write(0xff);  // reset
  mouse.read();  // ack byte
  mouse.read();  // blank */
  mouse.read();  // blank */
  mouse.write(0xf0);  // remote mode
  mouse.read();  // ack
  delayMicroseconds(100);
}

void setup()
{
  Serial.begin(9600);
  mouse_init();
}

/*
 * get a reading from the mouse and report it back to the
 * host via the serial line.
 */
void loop()
{
  char mstat;
  char mx;
  char my;

  /* get a reading from the mouse */
  mouse.write(0xeb);  // give me data!
  mouse.read();      // ignore ack
  mstat = mouse.read();
  mx = mouse.read();
  my = mouse.read();

  /* send the data back up */
  Serial.print(mstat, BIN);
  Serial.print("\tX=");
  Serial.print(mx, DEC);
  Serial.print("\tY=");
  Serial.print(my, DEC);
  Serial.println();
//  delay(20);  /* twiddle */
}
4

1 に答える 1

0

解決しました。私が持ってきた Genius マウスは、仕様上は PS/2 と下位互換性がありますが、下位互換性がないことが判明しました。ある時点で PS/2 機能が存在しないセンサー チップと交換したに違いありません。私は今、私が望んでいた仕事を完全に行っている別の USB マウスを持っています。

于 2012-05-15T07:28:12.500 に答える