Wishful Coding

Didn't you ever wish your computer understood you?

Control the mouse with a joystick

When I made PyMouse I did so because I had the idea to make an iPhone mouse. Today I had another crazy idea for moving the mouse: with a joystick! It turns out it's quite easy to use the joystick via PyGame, so that is what I did this evening. I plugged in the joystick from my brother, copied some PyGame example, imported my own PyMouse module and here is the result. You might need to tweak it a little to make it work with your joystick or game controller.
import pygame
from pymouse import PyMouse
from time import sleep

# edit this to reflect your joystick axis and buttons
action = {'x':0, 'y':1, 'multiplier':3, 'left':0, 'right':1}

pygame.init()
j = pygame.joystick.Joystick(0) # first joystick
j.init()
m = PyMouse()
print 'Initialized Joystick : %s' % j.get_name()
state = [0, 0]
try:
while True:
pygame.event.pump()
sleep(0.1)
# check if any button state has changed and change mouse state accordingly
if j.get_button(action['left']) and not state[0]:
state[0] = 1
print "left press"
m.press(*m.position())
elif not j.get_button(action['left']) and state[0]:
state[0] = 0
print "left release"
m.release(*m.position())
elif j.get_button(action['right']) and not state[1]:
state[1] = 1
print "right press"
m.press(*m.position(), button=2)
elif not j.get_button(action['right']) and state[1]:
state[1] = 0
print "right release"
m.release(*m.position(), button=2)

x, y = m.position()
m.move(
# get_axis returns a value between -1 and 1
# fumble a bit here to reverse axis
x + (j.get_axis(action['x']) * 50 * abs(j.get_axis(action['multiplier']) - 1)),
y + (j.get_axis(action['y']) * 50 * abs(j.get_axis(action['multiplier']) - 1))
)
except KeyboardInterrupt:
j.quit()
Pepijn de Vos