一、PS2接线说明
功能:
1,数据:控制器- > PlayStation 游戏机。这是一个集电极开路输出,需要一个上拉电阻(10K,或许更多)。(上拉电阻是必要的,因为控制器只能连接线对地,它不能真正把电压就行了)。
2,命令:PlayStation - >控制器。
4,地线,接电源负极。
5,电源:任何官方的索尼控制器应在 3-5V。
6,注意:各组发送/接收的字节前,此行必须被拉低,然后重新置高之后。在我们的测试中,它是不足够的,以配合永久-它被赶下来,周围每一组 Digitan 认为这是一个“片选”或“从选择”行,是用来解决不同的控制器上在同一总线上。
7,时钟: 500kH / Z,通常高。似乎是 SPI 总线的通信。我们已经得到了它的工作为 500kHz 小于 100kHz 的上升,(500K比特/秒,这还不算字节和数据包之间的延迟)。吉他英雄控制器连接时,时钟频率是 250kHz,这也是游戏站 1 使用的速率。
最后特别需要提醒的是:
按下遥控器的 MODE 键,手柄可配置成“红灯模式”或者“绿灯模式”,当遥控器侧面的 “MODE LED”亮为红灯模式,反之为绿灯模式,“红灯模式”和“绿灯模式”的主要区别是摇杆模拟值得输出。
红灯模式时:左右摇杆发送模拟值,0x00〜OxFF 之间,且摇杆按下的键值 L3、R3 有效;
绿灯模式时:左右摇杆模拟值为无效,推到极限时,对应发送 UP、RIGHT、DOWN、LEFT、△、〇、X、□,按键 L3、R3 无效。
引脚1DAT—>GPIO19
引脚2CMD—>GPIO23
引脚6SEL—>GPIO5
引脚7CLK—>GPIO18
二、程序说明
本程序取自一位大佬的博客https://blog.csdn.net/freewebsys/article/details/104734241
#include <PS2X_lib.h> //for v1.6
/******************************************************************
* set pins connected to PS2 controller: *设置连接到PS2控制器的引脚:
* - 1e column: original
* - 2e colmun: Stef?
* replace pin numbers by the ones you use *用您使用的密码替换密码
******************************************************************/
// ESP32 pin
// https://github.com/espressif/arduino-esp32/blob/master/docs/esp32_pinmap.png
#define PS2_DAT 19 //MISO
#define PS2_CMD 23 //MOSI
#define PS2_SEL 5 //SS
#define PS2_CLK 18 //SLK
/******************************************************************
* select modes of PS2 controller: *选择PS2控制器的模式:
* - pressures = analog reading of push-butttons
* - rumble = motor rumbling
* uncomment 1 of the lines for each mode selection
******************************************************************/
#define pressures false
#define rumble false
PS2X ps2x; // create PS2 Controller Class //创建PS2控制器类
//right now, the library does NOT support hot pluggable controllers, meaning //目前,该库不支持热插拔控制器,这意味着
//you must always either restart your Arduino after you connect the controller, //您必须始终在连接控制器后重新启动Arduino,
//or call config_gamepad(pins) again after connecting the controller. //或在连接控制器后再次调用config_gamepad(pins)。
int error = -1;
byte type = 0;
byte vibrate = 0;
int tryNum = 1;
void setup(){
// 115200
Serial.begin(115200);
//added delay to give wireless ps2 module some time to startup, before configuring it //添加了延迟,以使无线ps2模块在配置之前有一些启动时间