79 lines
2.1 KiB
Python
79 lines
2.1 KiB
Python
import pygame
|
|
from pydualsense import *
|
|
|
|
BATTERY_STATE = {
|
|
"0": "Discharging",
|
|
"1": "Charging",
|
|
"2": "Full",
|
|
"11": "Not charging",
|
|
"15": "Error",
|
|
"10": "Temp or voltage out of range"
|
|
}
|
|
|
|
# Initialize pygame
|
|
pygame.init()
|
|
screen = pygame.display.set_mode((800, 600))
|
|
pygame.display.set_caption("DualSense Demo with Pygame")
|
|
font = pygame.font.SysFont(None, 48)
|
|
clock = pygame.time.Clock()
|
|
|
|
# Initialize DualSense
|
|
ds = pydualsense()
|
|
ds.init()
|
|
|
|
# Set initial LED color
|
|
ds.light.setColorI(0, 100, 255)
|
|
|
|
# Configure adaptive trigger
|
|
ds.triggerL.setMode(TriggerModes.Rigid)
|
|
ds.triggerL.setForce(1, 255)
|
|
|
|
running = True
|
|
while running:
|
|
screen.fill((30, 30, 30))
|
|
|
|
# Read inputs from DualSense
|
|
text_lines = [
|
|
f"LX: {ds.state.LX:.2f}, LY: {ds.state.LY:.2f}",
|
|
f"RX: {ds.state.RX:.2f}, RY: {ds.state.RY:.2f}",
|
|
f"L2: {ds.state.L2:.2f}, R2: {ds.state.R2:.2f}",
|
|
f"Accel: {ds.state.accelerometer.X:.2f}, {ds.state.accelerometer.Y:.2f}, {ds.state.accelerometer.Z:.2f}",
|
|
f"Gyro: {ds.state.gyro.Roll:.2f}, {ds.state.gyro.Pitch:.2f}, {ds.state.gyro.Yaw:.2f}",
|
|
f"Power: {ds.battery.Level:4}%, State: {BATTERY_STATE[str(ds.battery.State)]}"
|
|
]
|
|
|
|
for i, line in enumerate(text_lines):
|
|
text = font.render(line, True, (255, 255, 255))
|
|
screen.blit(text, (20, 40 + i * 50))
|
|
|
|
# Button-based actions
|
|
if ds.state.square:
|
|
ds.light.setColorI(255, 0, 0) # Red
|
|
elif ds.state.triangle:
|
|
ds.light.setColorI(0, 255, 0) # Green
|
|
elif ds.state.circle:
|
|
ds.light.setColorI(0, 0, 255) # Blue
|
|
elif ds.state.cross:
|
|
ds.light.setColorI(255, 255, 255) # White
|
|
|
|
#ds.setLeftMotor(200)
|
|
#ds.setRightMotor(200) # Heavy rumble
|
|
|
|
# Handle pygame events
|
|
for event in pygame.event.get():
|
|
if event.type == pygame.QUIT: # Exit on window close or PS button
|
|
running = False
|
|
|
|
if ds.state.ps:
|
|
running = False
|
|
|
|
pygame.display.flip()
|
|
clock.tick(60)
|
|
|
|
# Clean up
|
|
ds.setLeftMotor(0)
|
|
ds.setRightMotor(0)
|
|
ds.light.setColorI(0, 0, 255)
|
|
ds.close()
|
|
pygame.quit()
|