当前位置: 首页 > news >正文

STM32中使用PS2手柄

目录

一、硬件介绍

1、PS2手柄

2、PS2和STM32单片机控制板连接

 二、程序设计

1、遥控手柄按键ID识别和命名

 2、创建STM32程序工程

(1)工程创建

 (2)Main程序

(3)PS2_Init()

(4)PS2_SetInit()

三、测试

四、工程下载连接


一、硬件介绍

1、PS2手柄

PS2无线手柄为2.4GHz无线通讯。常规的PS手柄如下,分为手柄和接收器

接收器的引进信号分布和说明如下:


 该接收器的引脚可以使用杜邦线直接跟单片机,不过使用杜邦线插拔不方便,建议使用成品的接收器。

2、PS2和STM32单片机控制板连接

 

PS2接收器和单片机引脚连接

 二、程序设计

1、遥控手柄按键ID识别和命名

(1)绿色字体为ID识别号

(2)红色字体为按键在程序中变量命名

(3)X和Y为的坐标系为单个摇杆的位置坐标系,摇杆在中间位置(静止无操作)坐标值为(128,128)

 2、创建STM32程序工程

(1)工程创建

使用STM32读取MPU6050陀螺仪_Big_潘大师的博客-CSDN博客的工程,继续接下来的PS2工作。

在APP中添加PS2用户程序(网上直接找到的或者淘宝商家也提供测试)

ps2.h代码

 (2)Main程序

#include "system.h"
#include "SysTick.h"
#include "SysDelay.h"
#include "led.h"
#include "i2c.h"
#include "mpu6050.h"
#include "usart.h"
#include "ps2.h"

int PS2_LX,PS2_LY,PS2_RX,PS2_RY,PS2_KEY;

int main()
{
	u8 count=0;
	u16 i=0;	
	
	SystemInit();               //系统初始化
	SysDelay_Init(72);			//自定义延时函数初始化
	LED_Init();
	USART1_Config();			//串口1初始化,上位机
	USART3_Config();			//串口3初始化-接蓝牙
	i2cInit();					//IIC初始化
	SysDelay_ms(10);			//10毫秒延时
	MPU6050_Init();			    //MPU6050 DMP陀螺仪初始化
	PS2_Init();					//PS2驱动端口初始化
	PS2_SetInit();		 		//ps2配置初始化,配置“红绿灯模式”,并选择是否可以修改
	
	PS2_KEY=0;
	delay_ms(1000);
	
	while(1)
	{
		/*LED灯闪烁*/	
		if(i%500==0)
		{
			led1=!led1;
		}
		
		//2毫秒执行一次——串口打印
		if(i%2000==0)
		{
			count++;
			printf("count:%d \r\n",count);
			printf("Pitch: %.2f ,Roll: %.2f,Yaw: %.2f \r\n",Pitch,Roll,Yaw);			//Pitch,Roll,Yaw数据传到串口
			
			printf("PS2按键:%d \r\n",PS2_KEY);     //打印按键的值
			printf("PS2左边x轴:%d \r\n",PS2_LX);   //打印左边X轴的值
			printf("PS2左边y轴:%d \r\n",PS2_LY);   //打印左边y轴的值
		    printf("PS2右边x轴:%d \r\n",PS2_RX);   //打印右边X轴的值
			printf("PS2右边y轴:%d \r\n",PS2_RY);   //打印右边y轴的值
		}
		
		//20毫秒执行一次
		if(i%20==0)
		{
			//获取摇杆数值
			PS2_LX=PS2_AnologData(PSS_LX);    
			PS2_LY=PS2_AnologData(PSS_LY);
			PS2_RX=PS2_AnologData(PSS_RX);
			PS2_RY=PS2_AnologData(PSS_RY);
			//获取按键值			
			PS2_KEY=PS2_DataKey();
						
		}
		/*获取MPU6050角度状态*/
		//在串口数据发送之后
		MPU6050_Pose();					//Pitch翻滚,Roll俯仰,Yaw偏航
		
		
		
		SysDelay_ms(1);					//1毫秒延时
		i++;
	}
}

(3)PS2_Init()

手柄引脚初始化

void PS2_Init(void)
{
	RCC->APB2ENR|=1<<2;     //使能PORTA时钟
	GPIOA->CRL&=0XFFFF000F; //PA1 2 3推挽输出 
	GPIOA->CRL|=0X00003330;   

	GPIOA->CRL&=0XFFFFFFF0; 
	GPIOA->CRL|=0X00000008; //PA0 设置成输入,默认下拉  	 	 											  
}

(4)PS2_SetInit()

手柄配置初始化

void PS2_SetInit(void)
{
	PS2_ShortPoll();
	PS2_ShortPoll();
	PS2_ShortPoll();
	PS2_EnterConfing();			//进入配置模式
	PS2_TurnOnAnalogMode();	    //红绿灯配置模式,并选择是否保存
	//PS2_VibrationMode();	    //开启震动模式
	PS2_ExitConfing();		    //完成并保存配置
}

三、测试

 

四、工程下载连接

https://download.csdn.net/download/panjinliang066333/86758071

 

相关文章:

  • 飞翔的小猫-第12届蓝桥杯Scratch省赛2真题第2题
  • 基于粒子群算法的移动机器人路径规划
  • C# 连接 MySQL 数据库
  • 计算机网络物理层
  • 朋友问我,斗破苍穹中到底出现了多少次“恐怖如斯”?
  • 计算机毕业设计SSM选题推荐 企业培训管理系统 艺术类培训中心管理系统 企业销售人员培训系统
  • 31、JAVA进阶——XML知识
  • 盘点5个C#实用的Word、PPT、Excel、Mail第三方库
  • stm32学习——DMA
  • Python课程设计基于卷积神经网络的手写数字识别系统源码
  • web前端网页设计作业—个人网页(游戏主题)(html+css+js)
  • 智能车逆透视、去畸变教程(含上位机、源码)
  • 拓展班上机课题解22/10/14
  • Matlab论文插图绘制模板第56期—曲面图(Surf)
  • LQ0091 完全二叉树的权值【最值】
  • __proto__ 和 prototype的关系
  • 「面试题」如何实现一个圣杯布局?
  • Angular2开发踩坑系列-生产环境编译
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • docker-consul
  • Effective Java 笔记(一)
  • Joomla 2.x, 3.x useful code cheatsheet
  • mockjs让前端开发独立于后端
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • Zsh 开发指南(第十四篇 文件读写)
  • 成为一名优秀的Developer的书单
  • 构造函数(constructor)与原型链(prototype)关系
  • 基于游标的分页接口实现
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 深度学习入门:10门免费线上课程推荐
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 我感觉这是史上最牛的防sql注入方法类
  • 《天龙八部3D》Unity技术方案揭秘
  • ​香农与信息论三大定律
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • %check_box% in rails :coditions={:has_many , :through}
  • (11)MSP430F5529 定时器B
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (附源码)ssm码农论坛 毕业设计 231126
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (四)库存超卖案例实战——优化redis分布式锁
  • (一)插入排序
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .net mvc部分视图
  • .NET 分布式技术比较
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .Net 应用中使用dot trace进行性能诊断
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .NET运行机制
  • ;号自动换行