我造轮子,你造车,创客一起造起来!塔克创新资讯【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/

SONY的PS2无线手柄是索尼游戏机的遥控手柄,控制协议已被全球创客破解,可以方便用于机器人控制器,作为遥控输入设备。

这款手柄价格便宜,性价比极高,本文使用X-CTR100控制器对PS2进行解码,并显示键值,方便用户使用。

原理

PS2无线手柄按键比较多,例如在一款游戏中的设定:

PS手柄无线接收器,针脚输出端(面对插头)

-----------------------------------------

PIN 1->| o o o | o o o | o o o |

\___________________________________/

针脚 从左到右分别是 :

1-DATA:信号流向从手柄到主机。此信号是一个8 bit的串行数据,同步传送于时钟下降沿(输入输出信号在时钟信号由高    到低时变化,所有信号的读取在时钟前沿到电平变化之前完成。)

2-COMMAND :信号流向从主机到手柄。此信号和DATA相对,同样是一个8 bit的串行数据,同步传送于时钟下降沿。

3-N/C (9 Volts unused)

4-GND

5-VCC :电源电压从5V到3V原装的索尼手柄都可以工作。主机主板上装有表面安装的750mA 保险丝 ,用于防止外设过载    (750mA是包括左右手柄和记忆卡)。

6-ATT :用于提供手柄触发信号。信号在通信期间处于低电平。又有人将此针脚叫做 Select, DTR 和 Command

7-CLOCK :信号流向从主机到手柄。用于保持数据同步。

8-N/C

9-ACK :从手柄到主机的应答信号。此信号在每个8 bits数据发送之后的最后一个时钟周期变低,并且ATT 一直保低电平。如果ACK 信号不变低约60微秒PS主机会试另一个外设。

PS手柄信号,所有通讯都是8 bit串行数据最低有效位先行。在PS 手柄总线的所有时码在时钟下降沿都是同步的。传送一个字节的情况如下所示。

数据线的逻辑电平在时钟下降沿驱动下触发改变。数据的接收读取在时钟的前沿(在记号*处)到电平变化之前完成。 在被选手柄接收每个COMMAND 信号之后,手柄需拉低ACK 电平在最后一个时钟。如果被选手柄没ACK 应答主机将假定没手柄接入。

当PS主机想读一个手柄的数据时,将会拉低ATT 线电平并发出一个开始命令 (0x01)。手柄将会回复它的ID (0x41=数字, 0x23=NegCon, 0x73=模拟红灯, 0x53=模拟绿灯). 在手柄发送ID

字节的同时主机将传送0x42 请求数据。随后命令线将空闲和手柄送出 0x5A 意思说:"数据来了"。

本文只针对 "模拟手柄红灯模式"进行破解,字节定义如下。

例程

X-CTR100控制器解码PS2无线手柄,并通过串口输出显示键值。

硬件说明

硬件资源:

  • 串口UART1
  • LC扩展接口(非串口,作为普通IO口使用)
  • PS2无线手柄(需自备)

连接关系如下,

DATA——LC接口-D6

COMM——LC接口-D5

GND——LC接口-GND

VCC——LC接口-3.3V

ATT——LC接口-D7

CLOCK——LC接口-D4

ACK——LC接口-D3

连接实物图

软件生态

X-SOFT软件生态,X-API扩展文件如下。

ax_ps2.c——PS2无线手柄操作源文件

ax_ps2.h——PS2无线手柄头文件

接口函数

void AX_PS2_Init(void); //PS2初始化

void AX_PS2_ScanKey(JOYSTICK_TypeDef* JoystickStruct);//PS2获取按键及摇杆数值

定义PS2键值结构体JOYSTICK_TypeDef,通过结构体进行键值和摇杆数据传输。

//手柄键值数据结构体    

typedef struct                             

{

uint8_t mode;                             /* 手柄的工作模式 */

 

uint8_t btn1; /* Bit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7

SLCT STRT UP R DOWN L */

 

uint8_t btn2; /* Bit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7

L2 R2 L1 R1 /\ O X 口 */

 

uint8_t RJoy_LR; /*右边摇杆 0x00 = 左 0xff = 右 */

 

uint8_t RJoy_UD; /*右边摇杆 0x00 = 上 0xff = 下 */

 

uint8_t LJoy_LR; /*右边摇杆 0x00 = 左 0xff = 右 */

 

uint8_t LJoy_UD; /*右边摇杆 0x00 = 上 0xff = 下 */

    

}JOYSTICK_TypeDef;

软件说明

主程序通过键值扫描函数,获取按键状态,并通过串口显示,主程序代码如下。

int main(void)

{    

    //X-CTR100初始化

    AX_Init(115200);

    printf("***X-CTR100 PS2无线手柄例程***\r\n\r\n");    

    
 

//功能配置    

    AX_PS2_Init();    //PS2初始化

    
 

 

    while (1)

    {

        AX_PS2_ScanKey(&my_joystick);

        

        //打印手柄键值

        printf("MODE:%2x BTN1:%2x BTN2:%2x RJOY_LR:%2x RJOY_UD:%2x LJOY_LR:%2x LJOY_UD:%2x\r\n",

        my_joystick.mode, my_joystick.btn1, my_joystick.btn2,

        my_joystick.RJoy_LR, my_joystick.RJoy_UD, my_joystick.LJoy_LR, my_joystick.LJoy_UD);    

 

        AX_Delayms(30);        

    }

}

实现效果

BTN1、BTN2为按键值,后面为摇杆数据,摇杆中位为0x7F或0x80。

玩转X-CTR100 l STM32F4 l PS2无线手柄的更多相关文章

  1. 玩转X-CTR100 l STM32F4 l PS2无线手柄-4WD智能小车

    我造轮子,你造车,创客一起造起来!更多塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 前面已介绍X-CTR100控制器解码PS2无线手 ...

  2. 玩转X-CTR100 l STM32F4 l ADC 模拟数字转换

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 AD转换接 ...

  3. 玩转X-CTR100 l STM32F4 l MPU6050加速度陀螺仪传感器

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 板载加速度 ...

  4. 玩转X-CTR100 l STM32F4 l X-CTR100与树莓派搭建机器人平台

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器与树莓派Linux系统 ...

  5. 玩转X-CTR100 l STM32F4 l 舵机控制

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器的舵机控制,X-CTR ...

  6. 玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器控制步进电机 ...

  7. 玩转X-CTR100 l STM32F4 l 基础例程printf、LED、蜂鸣器、拨码开关、位带操作

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器基础板载资源 ...

  8. 玩转X-CTR100 l STM32F4 l DSP指令集性能测试

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 DSP库的 ...

  9. 玩转X-CTR100 l STM32F4 l FPU单精度浮点性能测试

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器如何开启ST ...

随机推荐

  1. C#学习笔记(十六):索引器和重载运算符

    二维数组如何映射到一维数组 重载运算符 1.算术运算符 2.关系运算符, < 和 > 成对重载 using System; using System.Collections.Generic ...

  2. Spring资源加载基础ClassLoader

    1 ClassLoader工作机制 1.1 ClassLoader作用 寻找类字节码文件并构造出类在JVM内部表示的组件.负责运行时查找和装入Class字节码文件 1.2 装载步骤 1.2.1 装载 ...

  3. POJ 2965 The Pilots Brothers' refrigerator (枚举+BFS+位压缩运算)

    http://poj.org/problem?id=2965 题意: 一个4*4的矩形,有'+'和'-'两种符号,每次可以转换一个坐标的符号,同时该列和该行上的其他符号也要随之改变.最少需要几次才能全 ...

  4. 【NOI2013】向量内积

    定义两个$d$维向量${A=[a_1,a_2....a_n]}$,${B=[b_1,b_2....b_n]}$的内积为其相对应维度的权值的乘积和: $${\left \langle A,B \righ ...

  5. 《剑指offer》第三十一题(栈的压入、弹出序列)

    // 面试题31:栈的压入.弹出序列 // 题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是 // 否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1.2.3.4. / ...

  6. RetinaNet论文理解

    引言 介绍 目前精度高的检测器都是基于two-stage,proposal-driven机制,第一阶段生成稀疏的候选对象位置集,第二阶段使用CNN进一步将每个候选位置分为前景或者背景以及确定其类别: ...

  7. Codeforces 898F - Restoring the Expression(字符串hash)

    898F - Restoring the Expression 思路:字符串hash,base是10,事实证明对2e64取模会T(也许ull很费时),对1e9+7取模. 代码: #include< ...

  8. Lua中元表的学习

    --table 中我们可以访问对应的key来得到value值,但是却无法对两个 table 进行操作. --元表(Metatable),允许我们改变table的行为,可以对两个table进行操作 -- ...

  9. C#一套简单的单例系统

    单例基类 public class CSingletonBase<TYPE> { public static TYPE Singleton { get { return m_singlet ...

  10. java使用freemarker生成静态html页面

    1. 模板文件static.html <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " ...