Files
PyGame-Controller/dualsense.py
2025-04-16 20:51:53 +02:00

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()