咸鱼ZTMR实例—PS2手柄


主控板:ZTMR开发板

PS2手柄

PS2 手柄是游戏机的遥控手柄。psx 系列游戏主机在全球很是畅销。不知什么时候便有人打起 PS2手柄的主意,破解了通讯协议,使得手柄可以接在其他器件上遥控使用,比如遥控我们熟悉的机器人。突出的特点是现在这款手柄性价比极高。按键丰富,方便扩展到其它应用中。

PS2 由手柄与接收器两部分组成,手柄主要负责发送按键信息。都接通电源并打开手柄开关时,手柄与接收器自动配对连接,在未配对成功的状态下,接收器绿灯闪烁,手柄上的灯也会闪烁,配对成功后,接收器上绿灯常亮,手柄上灯也常亮,这时可以按“MODE”键,选择手柄发送模式,红灯模式:遥杆输出模拟值;绿灯模式:遥杆对应上面四个按键,只有四个极限方向对应。
接收器和主机(单片机)相连,实现主机与手柄之间的通讯。

接收器引脚输出:

1 2 3 4 5 6 7 8 9
DI/DAT DO/CMD NC GND VDD CS/SEL CLK NC ACK

例程:串口打印PS2按钮信息
main.py

# main.py -- put your code here!
import ps2def main():while True:pyb.delay(100)print('xycs:',ps2.ps2_key())
if __name__ == '__main__':main()

网上已经有开源的PS2手柄定义了, 我们保存成ps2.py文件直接保存起来就好了

ps2.py

from machine import Pin
import time
def ps2_test():print('test ok')
di=Pin(Pin.cpu.C6,Pin.IN,Pin.PULL_DOWN)
do=Pin(Pin.cpu.C7,Pin.OUT, )
cs=Pin(Pin.cpu.B0,Pin.OUT,)     #PULL_UP
clk=Pin(Pin.cpu.B1,Pin.OUT,) #D0 16  dat=DI
#D2 04  cmd=DO
#D3  0  CS =CS
#D4  02  CLK=CLK
def DO_H():do.value(1)
def DO_L():do.value(0)
def CS_H ():cs.value(1)
def CS_L():cs.value(0)
def CLK_H ():clk.value(1)
def CLK_L():clk.value(0)#常量按钮
PSB_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
# 左摇杆
PSS_RX = 5
PSS_RY = 6
PSS_LX = 7
PSS_LY = 8
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]
comd=[0x01,0x42]
data=[0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]
def ps2_init():CLK_H()DO_H()time.sleep_ms(10)
def ps2_cmd(cmd):global datadata[1]=0for ref in (1,2,4,8,16,32,64,128):if ( ref & cmd):DO_H()else:DO_L()CLK_H ()time.sleep_us(50)CLK_L()time.sleep_us(50)CLK_H ()if(di.value()==1):data[1]=ref|data[1]
def ps2_red():global dataglobal comdCS_L()ps2_cmd(comd[0])ps2_cmd(comd[1])CS_H()if(data[1]==57):return 0#red lightelse:return 1#not red
def ps2_read():global dataglobal comdbyte=0ref=0x01CS_L()ps2_cmd(comd[0])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):CLK_H ()CLK_L()time.sleep_us(50)CLK_H ()if(di.value()==1):data[byte]= ref|data[byte]time.sleep_us(50)CS_H ()
def ps2_clear():#okglobal datafor i in range(0,9,1):data[i]=0def ps2_andata(button):global datareturn data[button]
def ps2_key():global dataglobal maskps2_clear()ps2_read()handkey=(data[4]<<8)|data[3]for index in (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15):if (( handkey&(1<<(mask[index]-1)))==0):return index+2return 0

串口效果

咸鱼ZTMR实例—PS2手柄相关推荐

  1. 咸鱼ZTMR实例—机械臂

    咸鱼ZTMR实例-机械臂 1个舵机不过瘾,来4个搞搞机械臂. SG90舵机X4 范围180°(-90°~90°) 引脚 说明 暗灰(棕色) GND 红色 5V 橙色 X1 PS2手柄 PS2手柄数字 ...

  2. 咸鱼ZTMR实例—板载LED

    咸鱼ZTMR实例-板载LED 大部分开发板的例程,都是从闪灯(控制LED闪烁)开始的.因为闪灯的程序简单,也比较直观,不但可以让初学者快速了解基本方法, 也可以直观地看到效果. 用法 说明 pyb.L ...

  3. 咸鱼ZTMR实例—寻迹模块

    咸鱼ZTMR实例-寻迹模块 主控板:ZTMR1.1python开发板 寻迹模块 ZT红外寻迹 规格参数: 1.工作电压:DC 3.3V-5V 2.工作电流:尽量选择1A以上电源供电 3.工作温度:-1 ...

  4. 咸鱼ZTMR实例—加速传感器

    咸鱼ZTMR实例-加速传感器 MMA7660FC 加速度传感器基本使用 制作水平仪 MMA7660FC MMA7660FC可在六个方向定制垂直水平座向 集成了众多智能的运动功能,如方向.震动和敲击检测 ...

  5. 咸鱼ZTMR实例—巡线入门

    咸鱼ZTMR实例-巡线入门 之前我们用寻迹模块简单的做了一个防止小车高处跌落的功能,但是寻迹并不简单(/滑稽).本次我们使用寻迹来做一个巡线功能.简单来说就是我们画一条线,让小车按照线来行驶~~ 巡线 ...

  6. 咸鱼ZTMR实例—土壤湿度计检测模块

    咸鱼ZTMR实例-土壤湿度计检测模块 通过电位器调节土壤湿度控制阀值,可以自动对菜园,花园自动浇水,家庭花盆土壤湿度的控制,各种电子比赛,电子积木,arduino设计等. 主控板:ZTMR1.1开发板 ...

  7. 咸鱼ZTMR实例—自动浇花器

    咸鱼ZTMR实例-自动浇花器 我们之前用过土壤湿度计检测模块,继电器我们也会用了,还等什么呢?自动灌水安排上~ 主控板:ZTMR1.1开发板 土壤湿度计检测模块 模块介绍 采用优质土壤传感器做土壤湿度 ...

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

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

  9. 咸鱼ZTMS实例—心率检测

    咸鱼ZTMS实例-心率检测 所选设备 接线 示例代码 测试效果 所选设备 主控板:ZTMS1.1python开发板 0.96oled屏幕 max30102 MAX30102是一个集成的脉搏血氧仪和心率 ...

  10. 咸鱼ESP32实例—MQTT

    咸鱼ESP32实例-MQTT 发布者(publish)参考代码: 订阅者(subscribe)参考代码: 由于特殊的发布/订阅机制,服务器不需要存储数据(当然也可以在服务器的设备上建立一个客户端来订阅 ...

最新文章

  1. 2017-1-7 html元素分类(1)
  2. ci框架 乱码 mysql_mysql容器乱码问题
  3. Java可变参数 Python可变参数 Scala可变参数
  4. 转:Page.ClientScript.RegisterStartupScript(me.GetType(),script1,scriptalert('111');/script)...
  5. Python 爬虫咸鱼版
  6. 方便使用FFMPEG的经验
  7. 关于Windows高DPI的一些简单总结
  8. NCC2105关于分管领导审批流设置另一方法
  9. METS(护理类)一级考试的信效度分析及其对教学的作用
  10. html背景图片定位方法
  11. CAD学习之CASS快捷键
  12. java ipv6校验_Java对IPv6的支持详解:支持情况、相关API、演示代码等
  13. 小笨狼的LLDB技巧:chisel
  14. php操作redis方法详解
  15. https防止注入_离子注入新法,将钢的耐磨性提高百倍
  16. BET365网站websocket解密分析
  17. Python深度学习(循环神经网络)--学习笔记(十三)
  18. Java开发记事本(完整版)
  19. 计算机键盘桌滑道原理,电脑桌键盘滑道组装办法,办公桌下面的键盘托怎么安装...
  20. mysql threads create_mysql Threads_created 增长过快的解决

热门文章

  1. Freescale PowerPC系列架构 处理器 种类介绍 型号发展
  2. 基于SSM的网上购物系统的设计与开发
  3. 基于PHP+MySQL的网上图书店商城在线销售系统
  4. VisionPro实现测量工件内圆尺寸
  5. 定时 监控 shell 服务宕机自动重启,并发送短信通知
  6. 惠普触控板使用指南_hp触摸板开关怎么使用 如何锁定hp触摸板
  7. win7计算机管理没有用户模块,Win7系统安装“ipx协议”提示“找不到相应的模块”如何解决...
  8. 主板检测卡c5_主板检测卡代码大全
  9. window下ruby的下载与gem安装
  10. 哈夫曼编码C++实现