はじめに
DualShock3(PlayStationゲームコントローラ)について、どのキーに何番が振られているのか、調べます。
ここではPySDL2のジョイスティッククラスを利用しています。
環境
ハードウェア
- Raspberry Pi
- DualShock3(2023年改良版サードパーティ製)
ソフトウェア
- Raspberry Pi OS Bullseye 64bit
- Python 3
- PySDL2 0.9.16a1
- pysdl2-dll 2.26.5
PySDL2インストール
pip3 install -U git+https://github.com/py-sdl/py-sdl2.git
pysdl2-dllインストール
pip3 install -U pysdl2-dll
ソースコード
#!/usr/bin/env python # -*- coding: utf-8 -*- ########## # インポート ########## import ctypes import time from sdl2 import * ########## # グローバル変数 ########## # ジョイスティッククラス class Joystick: def __init__(self): SDL_Init(SDL_INIT_JOYSTICK) self.axis = {} self.button = {} def update(self, event): while SDL_PollEvent(ctypes.byref(event)) != 0: if event.type == SDL_JOYDEVICEADDED: self.device = SDL_JoystickOpen(event.jdevice.which) elif event.type == SDL_JOYAXISMOTION: self.axis[event.jaxis.axis] = event.jaxis.value elif event.type == SDL_JOYBUTTONDOWN: self.button[event.jbutton.button] = True elif event.type == SDL_JOYBUTTONUP: self.button[event.jbutton.button] = False # メイン関数 def main(): joystick = Joystick() event = SDL_Event() while True: joystick.update(event) time.sleep(0.1) print(joystick.axis) print(joystick.button) print(SDL_JoystickName(joystick.device)) print(SDL_JoystickNumAxes(joystick.device)) print(SDL_JoystickNumBalls(joystick.device)) print(SDL_JoystickNumButtons(joystick.device)) print(SDL_JoystickNumHats(joystick.device)) return # メイン関数 # 備考:main()に投げるだけ if __name__ == "__main__": main()