【python】PS4コントローラの入力を受け取る

最近ESP32を購入しました。ESP32を制御するのにPS4のコントローラが使えそうだったので、PS4のコントローラからの入力を受け取るコードがあったので、それを使ってみました。今回は使い方についてのまとめです。

今回使用したコード

Git HubにPS4コントローラの入力を受け取るコードがあったので、それを使います。
Git HubのURLは下記です。コードについてはリンク先を参照してください。

今回はこのコードをローカルに落として、実行します。
実行するのにpygameが必要なので、まだ入れていない方はpipコマンドでインストールしてください。

使い方は簡単でパソコンとPS4をUSBで接続した状態でコードを実行します。
もし実行時に下記のようなエラーが出た場合はPS4とパソコンの接続がうまくいってない可能性があるので、接続を再確認してください。

File ".\controller.py", line 32, in init
self.controller = pygame.joystick.Joystick(0)      
pygame.error: Invalid joystick device number
今回実行するにあたり、挙動を確認したかったので、time関数をimportしてsleepさせます。sleepを入れたところは下記の個所です。また、一部python2用の記述がされてエラーが出ていたので、変更しています。
        while True:
            for event in pygame.event.get():
                if event.type == pygame.JOYAXISMOTION:
                    self.axis_data[event.axis] = round(event.value,2)
                elif event.type == pygame.JOYBUTTONDOWN:
                    self.button_data[event.button] = True
                elif event.type == pygame.JOYBUTTONUP:
                    self.button_data[event.button] = False
                elif event.type == pygame.JOYHATMOTION:
                    self.hat_data[event.hat] = event.value

                # Insert your code on what you would like to happen for each event here!
                # In the current setup, I have the state simply printing out to the screen.
                
                # os.system('clear')#python2.*用の画面クリア
                os.system('cls')#python3.*用の画面クリア
                pprint.pprint(self.button_data)#入力されたボタンを表示
                pprint.pprint(self.axis_data)#入力されたジョイスティックの表示
                pprint.pprint(self.hat_data)#入力された十字キーの表示
            time.sleep(3)#動きを確認するために3秒間停止させる。

実行結果

このプログラムを実行するとボタンの入力、ジョイスティックの入力、十字キーの入力の3つを表示されます。 ボタンについては下記のようなものが出力されます。
{0: False,
 1: False,
 2: False,
 3: False,
 4: False,
 5: False,
 6: False,
 7: False,
 8: False,
 9: False,
 10: False,
 11: False,
 12: False,
 13: False}
※この出力の上部にもいろいろ出力されていますが、上記13項目だけ確認すれば問題ないです。13項目のうち、押されたボタンに対応した箇所がTrueになります。

ちなみに0~13の割り当ては以下の通りです。
0:□、1:×、2:〇、3:△、4:L1、5:R1、6:L2、7:R2、8:SHARE、9OPTIONS、10:L3(左スティック押下)、11:R3(右スティック押下)、12:PS4ボタン、13:タッチパッド押す

ジョイスティックの出力は下記のとおりです。
{0: -0.0, 1: -0.05, 2: 0.02, 3: -0.04, 4: -1.0, 5: -1.0}

割り当ては下記の通りです。
0:左スティックのx軸(左に倒すと-1、右に倒すと+1)、1:左のスティックのy軸(上に倒すと-1、下に倒すと+1)、2:右スティックのx軸(左に倒すと-1、右に倒すと+1)、3:右のスティックのy軸(上に倒すと-1、下に倒すと+1)
4,5は-1に張り付きで特に変化はありませんでした。(確認方法が悪いのかもしれませんが...)

ちなみに上記は何も出力は何も押してない状況なのですが、0~4の値がすべて0になっていません。私のコントローラがデフォルトで少し入力された状態になっているのですかね?

十字キーの出力は下記のとおりです。
{0: (0, 0)}

割り当ては下記の通りです。
(0,0) = (左右、上下)
※左と下が-1で右と上が+1です。

0 件のコメント :

コメントを投稿