MicroPython 如此簡單系列: PS2 無線遙控器 (Gamepad)

Yungger
4 min readAug 10, 2022
  • 2.4GHz 無線通訊
  • 傳輸距離最遠可達 8米
  • PS2 遙控器 (訊號發射器), 與接收器 (黑色盒子) 是成組配對好的, 所以, 不可與其他混用 !

操控模式

  • 數位模式 (綠色指示燈亮)
  • 類比模式 (紅色&綠色指示燈亮)
  • 數位/類比模式的切換 : 按 ANALOG (MODE) 鈕
  • 若進入休眠狀態, 指示燈全滅, 須先按一下 START 鈕, 才能被喚醒

PS2 鍵值配置

此表的鍵值由 MyKitPS2 函式庫取得, 可自行定義!
  • R3, L3 僅在類比模式可用
  • R/L-UR, UL, DR, DL 數位模式可用

函式庫 MyKitPS2

請先將函式庫 MyKitPS2 上傳至 MCU。

  • read(間隔毫秒):用來讀取所動作的按鈕鍵名與鍵值
  • gamepad(鍵值功能字典) :可用以查詢與自訂按鍵值與對應的功能
  • is_started :判斷 START 鍵是否已被按下, 可開始操控
  • is_analog :判斷 GAMEPAD 是否處於 Analog Mode

***如果需要進一步了解如何上傳檔案至 MCU 的方法, 建議您可先參考我的另一篇 “MicroPython 如此簡單: 檔案管理”. ***

測試範例

以 ESP32 腳位為例:

ESP32 的 GPIO 腳位

範例一: 讀取 PS2 鍵值

from MyKitPS2 import myPS2
ps2 = myPS2(26, 27, 14, 12)
while True:
k, v = ps2.read()
if v >= 0: # v >= 0, 找到按鍵中已定義的鍵值
print('Analog:{}, {}={}'.format(ps2.is_analog, k, v))

範例二: 啟動與結束的判斷

某些專案的情形, 必須要 PS2 按下某鍵 (例如, 預設的 START 鍵) 才開始, 或按下某鍵 (例如, 此例的 CROSS 鍵) 才結束。

from MyKitPS2 import myPS2
ps2 = myPS2(26, 27, 14, 12)
while True:
k, v = ps2.read()
if v >= 0 and ps2.is_started: # 判斷是否有按下 START 啟動的控制
print('Analog:{}, {}={}'.format(ps2.is_analog, k, v))
if k == 'CROSS': # 按 CROSS 離開
break

同此例的 CROSS 鍵, 可依此方式處理其他按鍵的對應作業方式。

範例三: 自訂按鍵值

有些時候, 我們希望按鍵的名稱與對應的作業, 能有較佳的可讀性, 例如結束遊戲的按鍵應該是 ’QUIT’ 而不是上面範例隨意取個 ‘CROSS’ 鍵來替代時, 就需要自行重新定義按鍵名稱與對應的鍵值。

例如, 將預設結束鍵值 CROSS 更名為 ‘QUIT’, TRIANGLE 更名為 ‘GREEN’ 時

pad_dict = {'QUIT': 57343, 'GREEN': 63487}   
print('\nNEW Gamepad:', ps2.gamepad(pad_dict))
  • 按鍵值重新定義後, 後續的程式就可以改用新的按鍵名稱來加以控制了。

如此而已, 就是這麼簡單, 希望能對你/妳有了一點點小幫助 !

作者:Yungger 勇哥

若覺得此文真對您有幫助, 點點左上方的拍手圖示, 鼓勵一下。若還想 請喝杯咖啡 鼓勵一下勇哥的繼續創作, 也感謝 😘 😘 !!

--

--