Как управлять клавиатурными входами с помощью 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 и другие подобные игры, используя эти элементы управления.. Что же мне делать??
@Naman, 👍3
Обсуждение2 ответа
Лучший ответ:
Ваши примеры отправки входных данных на монитор Arduino IDE и на Python включают отправку данных Arduino по соглашению "Последовательный через USB". Однако операционная система (Windows, macOS) не рассматривает это как законный ввод с клавиатуры/мыши/джойстика.
Существуют отдельные соглашения по USB (типы устройств) для клавиатуры/мыши/джойстика. Только Arduino, в которых интерфейс USB программируется, могут представить эти соглашения, причем некоторые из них проще, чем другие, и требуют понимания некоторых клиентских библиотек USB. Ссылка, предоставленная Крисом Страттоном, содержит некоторую полезную информацию.
Особенно простой способ разобраться в этом-с помощью Teensy PJRC, https://www.pjrc.com/teensy/, который поставляется с библиотеками и примерами, которые позволяют вам делать это "из коробки". Смотрите раздел "Teensyduino" на их веб-сайте для USB-клавиатуры, мыши, джойстика и так далее. Эти страницы являются полезным фоном, даже если вы не используете Teensy. Это привлекло небольшое количество пользователей, заинтересованных в этой области. Кроме того, различные Teensies-это удобные небольшие платы, которые хорошо вписываются в какое-либо устройство пользовательского интерфейса, которое вы, возможно, захотите создать.
Я позже, но я думаю, что вам следует переработать свой код python и arduino, чтобы сделать такие сообщения, как "start up", "end up", и если сообщение "start*", удерживайте эту клавишу, если "end *", отпустите эту клавишу. Это должно работать так, как задумано. Позже я закреплю код python и arduino здесь. (Также извините за мой английский, я русский)
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Это, по-видимому, охватывает почти ту же самую почву, что и http://arduinoprosto.ru/q/1148/use-an-arduino-as-a-user-interface-for-the-computer, @Chris Stratton