准毕业本科狗在指导老师的带领下,打算做一个使用履带机器人。以前也接触过一点树莓派,就打算用树莓派作为主控板(虽然有点傻),一方面也考虑了后续要使用opencv库作图像处理。做的时候,想一开始用ps2手柄控制机器人,奈何网上资料都是stm32和arduino的。

经过几天的查资料,我找到了micropython的ps2库(参考资料),但是为了直接使用树莓派自带的gpio,我稍微对程序做了一点修改,希望能给需要的同学一点帮助。


import time
import RPi.GPIO as gpioPSB_SELECT = 1
PSB_L3 = 2
PSB_R3 = 3
PSB_START = 4
PSB_PAD_UP = 5
PSB_PAD_RIGHT = 6
PSB_PAD_DOWN = 7
PSB_PAD_LEFT = 8
PSB_L2 = 9
PSB_R2 = 10
PSB_L1 = 11
PSB_R1 = 12
PSB_GREEN = 13
PSB_RED = 14
PSB_BLUE = 15
PSB_PINK = 16
PSB_TRIANGLE = 13
PSB_CIRCLE = 14
PSB_CROSS = 15
PSB_SQUARE = 26#右摇杆X轴数据
PSS_RX = 5
PSS_RY = 6
PSS_LX = 7
PSS_LY = 8
comd = [0x01, 0x42] #开始指令
data = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]#数据存储数组mask=[PSB_SELECT,PSB_L3,PSB_R3 ,PSB_START,PSB_PAD_UP,PSB_PAD_RIGHT,PSB_PAD_DOWN,PSB_PAD_LEFT,PSB_L2,PSB_R2,PSB_L1,PSB_R1 ,PSB_GREEN,PSB_RED,PSB_BLUE,PSB_PINK
] #按键值与按键说明class PS2KEY:def __init__(self,DAT,CMD,CS,CLK):gpio.setmode(gpio.BCM)     #选择 gpio numbers 编号系统gpio.setwarnings(False)# 设置gpio口为输出gpio.setup(DAT, gpio.IN, pull_up_down=gpio.PUD_DOWN)gpio.setup(CMD, gpio.OUT)gpio.setup(CS, gpio.OUT)gpio.setup(CLK, gpio.OUT)self.DAT = DATself.CMD = CMDself.CS = CSself.CLK = CLKself.ps2_init()#self.ps2_red()#手柄初始化def ps2_init(self):gpio.output(self.CS, True)gpio.output(self.CLK, True)gpio.output(self.CMD, True)time.sleep(0.01)#发送数据def ps2_cmd(self,cmd):global data            data[1]=0for ref in (1,2,4,8,16,32,64,128):if (ref & cmd):gpio.output(self.CMD, True)else:gpio.output(self.CMD, False)gpio.output(self.CLK, True)time.sleep(0.00005)gpio.output(self.CLK, False)time.sleep(0.00005)gpio.output(self.CLK, True)if(gpio.input(self.DAT)):data[1]=ref|data[1]time.sleep(0.000016)#判断是否为红灯模式 是--返回0 否--返回1def ps2_red(self):global dataglobal comdgpio.output(CS, False)self.ps2_cmd(comd[0])self.ps2_cmd(comd[1])gpio.output(CS, True)if(data[1]==57):return 0#red lightelse:return 1#not red#读取手柄数据def ps2_read(self):global dataglobal comdbyte=0ref=0x01gpio.output(self.CS, False)self.ps2_cmd(comd[0])self.ps2_cmd(comd[1])for byte in (2,3,4,5,6,7,8):for ref in (1,2,4,8,16,32,64,128):gpio.output(self.CLK, True)gpio.output(self.CLK, False)time.sleep(0.00005)gpio.output(self.CLK, True)if(gpio.input(self.DAT)):data[byte]=ref|data[byte]time.sleep(0.00005)gpio.output(self.CS, True)#清空datadef ps2_clear(self):#okglobal datafor i in range(9):data[i]=0#输出摇杆数据(0-255)def ps2_andata(self,button):global datareturn data[button]#输出按下的按键对应编号def ps2_key(self):global dataglobal maskself.ps2_clear()self.ps2_read()handkey=(data[4]<<8)|data[3]for index in range(16):if ((handkey&(1<<(mask[index]-1)))==0):return index+1return 0

实物连接图

这里测试了手柄△、□、○、×这几个按键返回的值。

PS:这是我第一次写博客,有错误请多多指教!!谢谢!

使用树莓派gpio连接ps2手柄模块(附程序)相关推荐

  1. 【STM32F4系列】【HAL库】【自制库】ps2手柄模块驱动

    外观和电气连接 外观 手柄外观如下 接收器外观 这是接收器和底座 电气连接 需要4根连接线 单片机输出是CLK DO CS 单片机输入是DI 电源电压是3.3-5v 注意模块和单片机共地 模块不支持高 ...

  2. 树莓派3b连接GPS+BD模块并用python获取数据(串口版)

    目的:树莓派用串口连接GPS+BD模块获取位置信息 材料:树莓派3b(Ubuntu MATE系统),GPS+BD模块,GPS有源天线,杜邦线 步骤: 1. 连接各模块 2. 修改串口设置,由于树莓派3 ...

  3. 【树莓派C语言开发】实验14:PS2游戏手柄模块(关联PCF8591)

    本次实验还是需要用到PCF8591模数转换器,莫非它要取代双色LED成为新的常驻嘉宾吗? 本次实验是摇杆实验.这个玩意可以用于操控机器人或者是树莓派的遥控小车.当然,生活中最常见的用途还是在游戏手柄上 ...

  4. 树莓派小车python代码_【树莓派】树莓派小车(二)树莓派、小车和红外线模块连接...

    上一篇文章介绍了小车底盘以及驱动板的安装,这一次来讲一讲树莓派与驱动板以及红外线模块的安装. 树莓派的GPIO引脚定义: 树莓派的GPIO引脚共分为两种类型,一种是PHYSICAL NUMBERING ...

  5. 树莓派小车python_【树莓派】树莓派小车(二)树莓派、小车和红外线模块连接(多图)...

    正文之前 上一篇文章介绍了小车底盘以及驱动板的安装,这一次来讲一讲树莓派与驱动板以及红外线模块的安装. 正文 1. 树莓派的GPIO引脚定义: 树莓派的GPIO引脚共分为两种类型,一种是PHYSICA ...

  6. 树莓派3 蓝牙连接 PS3手柄

    网上没有直接用3蓝牙连接树莓派的教程,看到一篇用2b 和 蓝牙适配器一起用 连接PS3 手柄的,所以先安装一下试试. http://tieba.baidu.com/p/3237051512 下面就是安 ...

  7. 树莓派 使用 i2c 连接 LCD1602/LCD1602A 模块

    成品 准备 LCD1602/LCD1602A 模块 IIC LCD1602 拓展板 配置 raspi-config >>> Interfacing Options >>& ...

  8. 玩转树莓派---详解树莓派的系统烧录,基础使用及基于树莓派制作手势控制的小车(附详细代码及演示效果)

    目录 一.写在前面 二.系统实现: Author:qyan.li Date:2022.6.10 Topic:详解树莓派的使用及基于树莓派制作手势控制的小车 Reference:如何给树莓派安装操作系统 ...

  9. 小车主板哪家强?PS2手柄4路电机输出..火魔童主板了解一下?

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 最近收到了芯吧客邮寄的火魔童V1.0主板,今天简单给大家介绍一下 别的废话就不多说了, ...

  10. python控制树莓派led_Python 控制树莓派 GPIO 输出:控制 LED 灯

    树莓派 GPIO 控制输出的入门应该都是从控制 LED 灯开始的吧. 树莓派版本:Model 3B+ 树莓派系统:Raspbian Stretch with desktop and recommend ...

最新文章

  1. 独家 | 用于数据清理的顶级R包(附资源)
  2. 深度学习处在大爆炸时代的边缘
  3. 【青海】2021年下半年软考报考时间及通知
  4. mysql中存储日期的类型_选择合适的 MySQL 日期时间类型来存储你的时间
  5. Sql Server之旅——第十二站 对锁的初步认识
  6. AOP框架Dora.Interception 3.0 [1]: 编程体验
  7. php globals_PHP $ GLOBALS(超级全局变量),带有示例
  8. 线程控制原语之pthread_self和pthread_create函数
  9. 第四节:HTML5给表单带来的新标签、新属性、新类型
  10. 微信公众平台消息接口开发(6)电话号码链接与网址链接
  11. Salesforce即将推出Einstein人工智能CRM平台
  12. 省、市联动的SQL脚本
  13. 【数据结构和算法笔记】用并查集求解等价关系
  14. alter table *** add constraint *** 用法---约束
  15. 怎样将Sublime Text 设置成中文版(完整教程)
  16. 【2022 谷歌开发者大会】名额有限,快来,带你体验谷歌的工程师文化
  17. Acwing动态规划1——背包问题
  18. 谷歌浏览器反复提示PageOffice安装
  19. [深度学习技巧]·数据类别不平衡问题处理
  20. bzoj 4372 烁烁的游戏 - 点分治 - 线段树

热门文章

  1. CM311-1a linux游戏服务器操作立马拥有我的世界私人服务器哦
  2. 推荐个汇编语言编译器 XP系统
  3. 随身系统veket linux v3.11简体中文免费版,《veket随身系统》下载(veket linux)1.9
  4. 计算机毕业设计-SSM企业OA管理系统-JavaWeb企业OA管理系统
  5. 超声波测距(含报警功能)
  6. vue播放报警音实现过程
  7. 在使用renderTo中遇到的Uncaught TypeError: Cannot read property 'insertAdjacentHTML' of null
  8. x264码率控制参数详解
  9. Client network socket disconnected before secure TLS connection was establishedView in Conso
  10. 寻找春天nbsp;九宫格日记-2014.07.14