5772|6

63

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

网上买了ps2手柄,按stm32 代码 改写了个micropython [复制链接]

 from machine import Pin
import time
di=Pin(12,Pin.IN,Pin.PULL_DOWN)                     
do=Pin(14,Pin.OUT, )                                             
cs=Pin(27,Pin.OUT,)     #PULL_UP                                          
clk=Pin(26,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)
#These are our button constants
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                #x
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




微信截图_20180330142837.png (341.48 KB, 下载次数: 0)

微信截图_20180330142837.png

最新回复

应该是按键控制吧  详情 回复 发表于 2018-3-31 11:54

赞赏

1

查看全部赞赏

点赞 关注
 
 

回复
举报

775

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
你好,这个可以详细说说如何使用吗,我之前也想买来玩玩,代替按键。
 
 
 

回复

1万

帖子

25

TA的资源

版主

板凳
 
非常不错。如果代码重新排版一下,看起来会好看一些。

点评

这个代码是干嘛用的呢?  详情 回复 发表于 2018-3-31 00:08
 
 
 

回复

2710

帖子

7

TA的资源

版主

4
 
dcexpert 发表于 2018-3-30 23:45
非常不错。如果代码重新排版一下,看起来会好看一些。

这个代码是干嘛用的呢?

点评

应该是按键控制吧  详情 回复 发表于 2018-3-31 11:54
个人签名
 
 
 

回复

1万

帖子

25

TA的资源

版主

5
 
cardin6 发表于 2018-3-31 00:08
这个代码是干嘛用的呢?

应该是按键控制吧
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(中级)

6
 
手柄资料:
1,按键

2,接收器



3,连线

4,使用




ps2_key读取按键,再执行相应的操作 ,做遥控器
5,用处:
我是给儿子做个遥控, 觉得ps2 遥控器蛮好的 。
6,视频





 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(中级)

7
 

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表