Чтение значений джойстика с помощью Python

Я хочу прочитать значения Logitech Logitech Extreme 3D Pro с Raspberry Pi. Я использую библиотеку pygame.

Сценарий:

import pygame
import sys
import time

pygame.joystick.init()

print pygame.joystick.get_count()

_joystick = pygame.joystick.Joystick(0)
_joystick.init()
print _joystick.get_init()
print _joystick.get_id()
print _joystick.get_name()
print _joystick.get_numaxes()
print _joystick.get_numballs()
print _joystick.get_numbuttons()
print _joystick.get_numhats()
print _joystick.get_axis(0)

Выход:

1
1
0
Logitech Logitech Extreme 3D Pro
4
0
12
SDL_JoystickNumHats value:1:
1
SDL_JoystickGetAxis value:0:
0.0

Есть 4 оси и я повернул их все.

Я не могу найти проблему. Я уже пробовал использовать другие оси.

Спасибо за помощь.


person Markus Blechschmidt    schedule 05.10.2013    source источник
comment
Каков ожидаемый результат?   -  person kindall    schedule 06.10.2013
comment
Пробовали ли вы зацикливаться на get_axis или обрабатывать JOYAXISMOTION события вместо опроса? Возможно, ваш джойстик всегда воспринимает начальное положение как 0, поэтому вызов get_axis сразу после get_init всегда будет возвращать 0.0.   -  person abarnert    schedule 06.10.2013


Ответы (3)


Я столкнулся с той же проблемой. Вы должны написать pygame.event.get(), чтобы прочитать информацию с джойстика. В противном случае он никогда не обновляется.

person user4092994    schedule 29.09.2014

Если проблема в том, что значение всегда равно 0, попробуйте выполнить pygame.event.pump() перед чтением значений. У меня была аналогичная проблема, и это помогло.

person cube    schedule 11.01.2014

Я лучше подожду (даже больше в треде), например:

    axes = [ 0.0 ] * your_joystick.get_numaxes()
    buttons = [ False ] * your_joystick.get_numbuttons()

    while self.keep_alive:
        event = pygame.event.wait()
        if event.type == pygame.QUIT:
             self.keep_alive = False
        elif event.type == pygame.JOYAXISMOTION:
            e = event.dict
            axes[e['axis']] = e['value']
        elif event.type in [pygame.JOYBUTTONUP, pygame.JOYBUTTONDOWN ]:
            e = event.dict
            buttons[e['button']] ^= True
person s4mdf0o1    schedule 21.05.2015