Я пытаюсь подключить мышь Genius к Arduino с помощью эскиза мыши PS2, но она не инициализирует мышь

Я использовал эскиз мыши в нижней части этого сообщения (написанного кем-то другим), чтобы попытаться получить данные о движении мыши PS/2. Я проверил спецификацию для этой мыши, которая говорит, что она совместима с PS/2. Однако, когда я запускаю его, кажется, что он останавливается на первой строке mouse_init, где написано: "mouse.write(0xff); // reset". Это вызов функции в ps2.h. ps2.h существует с 2008 года и использовался во многих проектах, поэтому я предполагаю, что все в порядке, но мне было интересно, могут ли быть некоторые особенности USB-мышей, подключающихся как мыши PS/2, что эта библиотека никогда не была разработан, чтобы справиться с У кого-нибудь есть опыт, который может пролить свет на это?

Я смог определить, что 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 */
}

1 ответ

Решение

Решил это. Как оказалось, мышь Genius, которую я привез, не имеет обратной совместимости с PS/2, хотя в спецификации сказано, что это так. Должно быть, они заменили сенсорную микросхему на ту, в которой в какой-то момент возможности PS/2 отсутствовали. Теперь у меня есть другая USB-мышь, которая отлично справляется со своей задачей.

Другие вопросы по тегам