arduino环境下用ESP32连接PS2手柄

本文介绍了如何在arduino环境下使用ESP32连接PS2手柄,包括PS2接线说明、程序说明及注意事项。接线涉及数据、命令、地线和电源线,手柄有红绿灯模式,影响摇杆模拟值输出。程序基于特定库实现,下载与运行时需注意电源和接线问题。
摘要由CSDN通过智能技术生成

一、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模块在配置之前有一些启动时间
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值