Отладка RN 42 HID Mouse

Я пытаюсь использовать RN 42 и Arduino Uno для управления мышью Bluetooth. Я настроил RN 42 с помощью команд S ~, 6 и SH, 0220 и R, 1, чтобы перевести устройство в режим скрытой мыши. Есть ли что-нибудь, что я пропустил? Ниже приведен скетч, который я использую для отправки отчетов мыши на Bluetooth. Скетч компилируется нормально, но перемещение джойстика не приводит к перемещению курсора. В конце я включил строку кода для печати на последовательном порту любых данных, отправляемых через последовательный программный интерфейс на Bluetooth. Однако, когда я просматриваю последовательный монитор, я получаю много перевернутых вопросительных знаков. Кто-нибудь знает, почему это так? Заранее благодарю.


const int bluetoothTx = 4;    // Вывод TX RN-42, Arduino D2 (настроить как вывод RX Ard)
const int bluetoothRx = 3;    // Вывод RX RN-42, Arduino D3 (настроить как вывод TX)
const int button = 5;
const int xAxis = A0;         // ось X джойстика
const int yAxis = A1;         // диапазон ввода по оси Y джойстика
int range = 12;               // диапазон вывода движения по X или Y
int responseDelay = 5;        // задержка отклика мыши, в мс
int threshold = range / 4;    // порог покоя
int center = range / 2;       // значение положения покоя

SoftwareSerial BT(bluetoothTx, bluetoothRx); // аргументы SoftwareSerial(RXpin, TXpin)

void mouseCommand(byte buttons, byte x, byte y) {
  BT.write((byte)0xFD);
  BT.write((byte)0x05);
  BT.write((byte)0x02);
  BT.write((byte)buttons);
  BT.write((byte)x);
  BT.write((byte)y);
  BT.write((byte)0x00);
}


int readAxis(int thisAxis) {
  // считывание аналогового входного сигнала:
  int reading = analogRead(thisAxis);

  // сопоставьте показания из диапазона аналогового ввода с диапазоном выходного сигнала:
  reading = map(reading, 0, 1023, 0, 12);

  /* threshold prevents the mouse from reading small unintentional movements. 
  If the output reading is outside from the rest position threshold, use it: */
  int distance = reading - center;

  if (abs(distance) < threshold) {
    distance = 0;
  }

  // возвращает масштабированное расстояние для этой оси:
  return distance;
}


void setup() {
  pinMode(button, INPUT);
  pinMode(bluetoothTx, INPUT); // bluetoothTX эквивалентен pinMode вывода arduino RX
  pinMode(bluetoothRx, OUTPUT);
  Serial.begin(115200);  // Запуск последовательного монитора со скоростью 115200 бит/ с
  BT.begin(115200);  // RN-42 по умолчанию равен 115200 бит/с
}

void loop() {
  // считывание и масштабирование по двум осям:
  int xReading = readAxis(xAxis);
  int yReading = readAxis(yAxis);
  int buttonState = digitalRead(button);

  // переместите курсор мыши:
  mouseCommand(buttonState, xReading, yReading);
  delay(responseDelay);

  if(BT.available())  // Если на модуль Bluetooth отправляются данные
  {
    // Отправка любых символов, полученных bluetooth, на последовательный монитор
    Serial.print((char)BT.read());  
  }
}

, 👍2

Обсуждение

что вы имеете в виду под "управлением мышью по Bluetooth`? ... мышь - это устройство ввода, а не устройство вывода, @jsotola

Я думаю, что OP хочет настроить и использовать RN42 (который является чипом Bluetooth) в качестве скрытой мыши для использования с ПК. Затем Arduino считывает данные с джойстика и отправляет данные на RN42 для соответствующего перемещения курсора на ПК, @chrisl

@Tadashi Есть ли у вас GPIO11 RN42 на высоком уровне при включении питания?, @chrisl

Спасибо за ответы. Проблема с отсутствием ответа от мыши заключалась в том, что Bluetooth не подключался автоматически к компьютеру после выключения питания. Я решил эту проблему, отправив команду SM, 6 для автоматического повторного подключения, а затем R, 1 для перезагрузки., @ponderosa

Тем не менее, я столкнулся с несколькими ошибками, но исправил их после подключения RN 42. Для тех, кто пытается создать скрытую мышь, у меня есть несколько советов по устранению неполадок. Моя мышь отклонялась в верхний левый угол экрана, потому что положение покоя джойстика не находилось в центре диапазона (12), к которому я хотел сопоставить значения аналогового банка. Это было связано с тем, что мой джойстик не выводил 1023 в качестве максимального значения. Я уменьшил 1023 на 0,6, чтобы решить эту проблему. Другая проблема заключалась в том, что при перемещении джойстика моя мышь следовала по одной траектории и больше никуда не перемещалась. Увеличение задержки ответа решило эту проблему., @ponderosa

Я знаю, что прошло много времени, я работаю над тем же проектом, что и вы, Ponderosa, вы смогли заставить его работать? Я использую плату esp32 с тем же джойстиком. В надежде получить от вас ответ. Спасибо, @Gerth


1 ответ


2

Проблема с отсутствием ответа от мыши заключалась в том, что Bluetooth не подключался автоматически к компьютеру после выключения питания. Я решил эту проблему, отправив команду SM, 6 для автоматического повторного подключения, а затем R, 1 для перезагрузки.

,