import time
from machine import Pin
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
#右摇杆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):
self.DAT = Pin(DAT, Pin.IN, Pin.PULL_DOWN)
self.CMD = Pin(CMD, Pin.OUT)
self.CS = Pin(CS,Pin.OUT)
self.CLK = Pin(CLK,Pin.OUT)
self.ps2_init()
#手柄初始化
def ps2_init(self):
self.CS.high()
self.CMD.high()
self.CLK.high()
time.sleep(0.01)
#发送数据
def ps2_cmd(self,cmd):
global data
data[1]=0
for ref in (1,2,4,8,16,32,64,128):
if (ref & cmd):
self.CMD.high()
else:
self.CMD.low()
self.CLK.high()
time.sleep(0.00005)
self.CLK.low()
time.sleep(0.00005)
self.CLK.high()
if self.DAT.value() == 1:
data[1]=ref|data[1]
time.sleep(0.000016)
#判断是否为红灯模式 是--返回0 否--返回1
def ps2_red(self):
global data
global comd
self.CS.low()
self.ps2_cmd(comd[0])
self.ps2_cmd(comd[1])
self.CS.high()
if(data[1]==57):
return 0#red light
else:
return 1#not red
#读取手柄数据
def ps2_read(self):
global data
global comd
byte=0
ref=0x01
self.CS.low()
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):
self.CLK.high()
self.CLK.low()
time.sleep(0.00005)
self.CLK.high()
if self.DAT.value() == 1:
data[byte]=ref|data[byte]
time.sleep(0.00005)
self.CS.high()
#清空data
def ps2_clear(self):#ok
global data
for i in range(9):
data[i]=0
#输出摇杆数据(0-255)
def ps2_andata(self,button):
global data
return data[button]
#输出按下的按键对应编号
def ps2_key(self):
global data
global mask
self.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+1
return 0
树莓派PICO控制遥控手柄
需积分: 0 103 浏览量
2022-11-27
10:26:08
上传
评论 2
收藏 3.74MB RAR 举报
天池怪兽8
- 粉丝: 0
- 资源: 1
最新资源
- python-leetcode面试题解之第198题打家劫舍-题解.zip
- python-leetcode面试题解之第191题位1的个数-题解.zip
- python-leetcode面试题解之第186题反转字符串中的单词II-题解.zip
- 一个基于python的web后端高性能开发框架,下载可用
- python-leetcode面试题解之第179题最大数-题解.zip
- python-leetcode面试题解之第170题两数之和III数据结构设计-题解.zip
- python-leetcode面试题解之第168题Excel表列名称-题解.zip
- python-leetcode面试题解之第167题两数之和II输入有序数组-题解.zip
- python-leetcode面试题解之第166题分数到小数-题解.zip
- python-leetcode面试题解之第165比较版本号-题解.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈