咸鱼ZTMR实例—PS2手柄

咸鱼ZTMR实例—PS2手柄咸鱼ZTMR实例—PS2手柄主控板:ZTMR开发板PS2手柄PS2手柄是游戏机的遥控手柄。psx系列游戏主机在全球很是畅销。不知什么时候便有人打起PS2手柄的主意,破解了通讯协议,使得手柄可以接在其他器件上遥控使用,比如遥控我们熟悉的机器人。突出的特点是现在这款手柄性价比极高。按键丰富,方便扩展到其它应用中。PS2由手柄与接收器两部分组成,手柄主要负责发送按键信息。都接通电…

大家好,又见面了,我是你们的朋友全栈君。

咸鱼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 ps2


def 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 data
data[1]=0
for 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 data
global comd
CS_L()
ps2_cmd(comd[0])
ps2_cmd(comd[1])
CS_H()
if(data[1]==57):
return 0#red light
else:
return 1#not red
def ps2_read():
global data
global comd
byte=0
ref=0x01
CS_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():#ok
global data
for i in range(0,9,1):
data[i]=0
def ps2_andata(button):
global data
return data[button]
def ps2_key():
global data
global mask
ps2_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+2
return 0

串口效果
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/133125.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • git常用命令大全「建议收藏」

    git常用命令大全「建议收藏」1.强制推送(慎用,除非你认为其他冲突等可以丢弃或者不是很重要)gitpush–force2.创建文件等小命令toucha//创建一个a文件echo1234>>a//把1234这个内容放入a文件cata//打开a文件读取出a文件中的内容mkdirtest//创建test文件夹rm文件名//删除文件pwd//打印…

  • XSRF 防御「建议收藏」

    XSRF 防御「建议收藏」#XSRF防御#需求分析XSRF又名CSRF(opensnewwindow),跨站请求伪造,它是前端常见的一种攻击方式,我们先通过一张图来认识它的攻击手段。CSRF的防御手段有很多,比如验证请求的referer,但是referer也是可以伪造的,所以杜绝此类攻击的一种方式是服务器端要求每次请求都包含一个token,这个token不在前端生成,而是在我们每次访…

  • 蓝桥杯猴子分香蕉_蓝桥杯少儿编程大赛试题

    蓝桥杯猴子分香蕉_蓝桥杯少儿编程大赛试题packageexec;importjava.util.Scanner;/**问题描述  秋天到了,n只猴子采摘了一大堆苹果放到山洞里,约定第二天平分。这些猴子很崇拜猴王孙悟空,所以都想给他留一些苹果。第一只猴子悄悄来到山洞,把苹果平均分成n份,把剩下的m个苹果吃了,然后藏起来一份,最后把剩下的苹果重新合在一起。这些猴子依次悄悄来到山洞,都做同样的操作,恰好每次都剩下了m个苹果

    2022年10月11日
  • Linux学习——磁盘管理、用户管理、权限管理命令

    一:磁盘管理 df 查看磁盘大小 –h 1024 –H 1000 du 统计磁盘上文件的大小 — du -s /目录 — -h 1024显示二:用户管理 1 Linux中用户和用户组的概念 用户:使用操作系统的人,可以有很多的用户,运行多个用户同时操作一个系统 用户组:具有相同系统权限的一

  • Spring Boot 2.x: 定时给对象发送天气

    Spring Boot 2.x: 定时给对象发送天气使用Java写一个定时给对象发送天气的功能前言技术栈快速创建实例pom.xml文件新建接收天气api的实体天气接口封装的天气api简单演示获取天气api与发送邮件的逻辑设置发送账号信息配置appliction.properties控制层启动类效果源码地址前言不知不觉,又到了雨季,你对象是不是经常忘记带伞呢,这个时候写一个自动定时发送邮件的程序,提醒她带伞,会不会对你崇拜有加呢,当然,如果你对象是一位攻城狮,当我没讲~技术栈SpringBoot2.3.1Jdk1.8Maven快速创

  • CEGUI渲染概论

    CEGUI渲染概论
    1、几个重要的类
    Direct3D9Renderer负责CEGUI的Render的接口
    RenderingSurface渲染接口类
    RenderingWindow可渲染窗口
    RenderTarget的继承关系相关类。
    Direct3D9GeometryBuffer类
    其方法
     voiddraw()const;//渲染
       voidsetTranslation(constVector3&t);

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号