ps2controller
CircuitPython library to read Sony PS1 and PS2 wired game controllers
Author(s): Tod Kurt
Implementation Notes
Hardware:
Sony PS1 or PS2 controller or compatible device
Software and Dependencies:
Adafruit CircuitPython firmware for the supported boards: https://circuitpython.org/downloads
- class ps2controller.PS2Button
PS2 Button constants mapping button name to number
- CIRCLE = 13
Circle (red) action button, digital and analog (pressure)
- CROSS = 14
Cross (blue) action button, digital and analog (pressure)
- DOWN = 6
D-pad DOWN, digital and analog (pressure)
- L1 = 10
Left upper shoulder trigger button, digital and analog (pressure)
- L2 = 8
Left lower shoulder trigger button, digital and analog (pressure)
- L3 = 1
L3 button (left stick push), digital only
- LEFT = 7
D-pad LEFT, digital and analog (pressure)
- R1 = 11
Right upper shoulder trigger button, digital and analog (pressure)
- R2 = 9
Right lower shoulder trigger button, digital and analog (pressure)
- R3 = 2
R3 button (right stick push), digital only
- RIGHT = 5
D-pad RIGHT, digital and analog (pressure)
- SELECT = 0
SELECT button, digital only
- SQUARE = 15
Square (pink) action button, digital and analog (pressure)
- START = 3
START button, digital only (pressure)
- TRIANGLE = 12
Triangle (green) action button, digital and analog (pressure)
- UP = 4
D-pad UP, digital and analog (pressure)
- button_to_analog_id = (-1, -1, -1, -1, 11, 9, 12, 10, 19, 20, 17, 18, 13, 14, 15, 16)
Map digital button id to button name
- class ps2controller.PS2ButtonEvent(id, pressed, released, name)
The event ‘objects’ returned by ps2.update()
- id
Alias for field number 0
- name
Alias for field number 3
- pressed
Alias for field number 1
- released
Alias for field number 2
- class ps2controller.PS2Controller(clk, cmd, att, dat, enable_sticks=True, enable_rumble=False, enable_pressure=False)
Driver to read and control a Sony PS1 or PS2 wired controller
- Parameters:
clk (Pin) – PS2 clock pin (blue wire)
cmd (Pin) – PS2 command pin (orange wire)
att (Pin) – PS2 attention pin (yellow wire)
dat (Pin) – PS2 data pin (brown wire)
enable_sticks (bool) – True to enable analog sticks (otherwise faster digital only reads)
enable_rumble (bool) – True to enable controlling rumble motors (needs extra voltage and current)
enable_pressue (bool) – True to enable reading analog button pressure
- analog_button(button_id)
Return analog pressure (0-255) value for button, if in pressure mode, otherwise -1.
:param int button_id 0-15 id number PS2ButtonEvent.id or PS2Button.*
- analog_left()
Return (x,y) tuple (0-255,0-255) of the left analog stick, if present.
- analog_right()
Return (x,y) tuple (0-255,0-255) of the right analog stick, if present.
- button(button_id)
Return True if button is currently pressed
- Parameters:
button_id (int) – 0-15 id number from PS2ButtonEvent.id or PS2Button.*
- buttons()
Return a 16-bit bitfield of the state of all buttons
- connected()
Returns True if controller was connected as of last update()
- read()
Read from the controller. Must be called frequently. Called by update().
- update()
Read the controller and return a list of PS2ButtonEvents. Must be called frequently or the controller disconnects.