Как управлять клавиатурными входами с помощью arduino(serial monitor) и клавиатурных библиотек python?

Я могу управлять своим монитором и большинством других приложений, предоставляя последовательный вход python через arduino. Код Arduino:

void setup()
 {

  pinMode(2, INPUT); 
  pinMode(3, INPUT);
  pinMode(4, INPUT);
  pinMode(5, INPUT);
  pinMode(6, INPUT);
  pinMode(7, INPUT);
  Serial.begin(9600);

}

void loop()
{
  if(digitalRead(2) == HIGH)
  {
    delay(5);
  }
  else 
  {
    Serial.println("up");
  }
  if(digitalRead(3) == HIGH)
  {
    delay(5);
  }
  else 
  {
    Serial.println("down");
  }
  if(digitalRead(4) == HIGH)
  {
    delay(5);
  }
  else 
  {
    Serial.println("left");
  }
  if(digitalRead(5) == HIGH)
  {
    delay(5);
  }
  else 
  {
    Serial.println("right");
  }
  if(digitalRead(6)== HIGH)
  {
    delay(5);
  } 
  else
  {
    Serial.println("space");//orange
  }
  if(digitalRead(7)==HIGH)
  {
     delay(5);
  }   
  else
  {  
    Serial.println("nitro");//brown
  }  
 }

Код Python:

import serial
from pymouse import PyMouse
from pykeyboard import PyKeyboard

k = PyKeyboard()

ser = serial.Serial('COM7', 9600)


#sp.write("AT\r\n".encode('ascii'))

while True:
    p=ser.readline()
    print p
    if ('up' in p):
        k = PyKeyboard()

        k.tap_key(k.up_key)

    if ('down' in p):
        k = PyKeyboard()

        k.tap_key(k.down_key)


    if ('right' in p):
        k = PyKeyboard()

        k.tap_key(k.right_key)


    if ('left' in p):
        k = PyKeyboard()

        k.tap_key(k.left_key)

    if ('space' in p):
        k = PyKeyboard()

        k.tap_key(k.space_key)

    if ('nitro' in p):
        k = PyKeyboard()

        k.tap_key(k.enter_key)    

Моя проблема в том, что..Я не могу играть в такие игры, как NFS и другие подобные игры, используя эти элементы управления.. Что же мне делать??

, 👍3

Обсуждение

Это, по-видимому, охватывает почти ту же самую почву, что и http://arduinoprosto.ru/q/1148/use-an-arduino-as-a-user-interface-for-the-computer, @Chris Stratton


2 ответа


Лучший ответ:

2

Ваши примеры отправки входных данных на монитор Arduino IDE и на Python включают отправку данных Arduino по соглашению "Последовательный через USB". Однако операционная система (Windows, macOS) не рассматривает это как законный ввод с клавиатуры/мыши/джойстика.

Существуют отдельные соглашения по USB (типы устройств) для клавиатуры/мыши/джойстика. Только Arduino, в которых интерфейс USB программируется, могут представить эти соглашения, причем некоторые из них проще, чем другие, и требуют понимания некоторых клиентских библиотек USB. Ссылка, предоставленная Крисом Страттоном, содержит некоторую полезную информацию.

Особенно простой способ разобраться в этом-с помощью Teensy PJRC, https://www.pjrc.com/teensy/, который поставляется с библиотеками и примерами, которые позволяют вам делать это "из коробки". Смотрите раздел "Teensyduino" на их веб-сайте для USB-клавиатуры, мыши, джойстика и так далее. Эти страницы являются полезным фоном, даже если вы не используете Teensy. Это привлекло небольшое количество пользователей, заинтересованных в этой области. Кроме того, различные Teensies-это удобные небольшие платы, которые хорошо вписываются в какое-либо устройство пользовательского интерфейса, которое вы, возможно, захотите создать.

,

1

Я позже, но я думаю, что вам следует переработать свой код python и arduino, чтобы сделать такие сообщения, как "start up", "end up", и если сообщение "start*", удерживайте эту клавишу, если "end *", отпустите эту клавишу. Это должно работать так, как задумано. Позже я закреплю код python и arduino здесь. (Также извините за мой английский, я русский)

,