Autoformat guitar hero controller script

This commit is contained in:
Kai Vogelgesang 2021-09-10 14:35:36 +02:00
parent 70671f6d54
commit d7ed085686
Signed by: kai
GPG Key ID: 0A95D3B6E62C0879

View File

@ -3,10 +3,12 @@ import math
import pygame import pygame
import serial import serial
def clamp(x, ab): def clamp(x, ab):
(a, b) = ab (a, b) = ab
return max(a, min(b, x)) return max(a, min(b, x))
def rescale(x, from_limits, to_limits): def rescale(x, from_limits, to_limits):
(a, b) = from_limits (a, b) = from_limits
x_0_1 = (x - a) / (b - a) x_0_1 = (x - a) / (b - a)
@ -14,6 +16,7 @@ def rescale(x, from_limits, to_limits):
(c, d) = to_limits (c, d) = to_limits
return c + (d - c) * x_0_1 return c + (d - c) * x_0_1
class MovingHead: class MovingHead:
def __init__(self, start_addr): def __init__(self, start_addr):
self.start_addr = start_addr self.start_addr = start_addr
@ -25,7 +28,12 @@ class MovingHead:
self.rgbw = (0, 0, 0, 0) self.rgbw = (0, 0, 0, 0)
def __str__(self): def __str__(self):
return f"MovingHead({self.start_addr}): pan={self.pan!r}, tilt={self.tilt!r}, speed={self.speed!r}, dimmer={self.dimmer!r}, rgbw={self.rgbw!r}"
return (
f"MovingHead({self.start_addr}): pan={self.pan!r}, "
f"tilt={self.tilt!r}, speed={self.speed!r}, "
f"dimmer={self.dimmer!r}, rgbw={self.rgbw!r}"
)
def render(self, dst): def render(self, dst):
@ -62,6 +70,7 @@ class MovingHead:
dst[offset : offset + len(channels)] = channels dst[offset : offset + len(channels)] = channels
if __name__ == "__main__": if __name__ == "__main__":
movingheads = [ movingheads = [
@ -71,10 +80,10 @@ if __name__ == "__main__":
MovingHead(43), MovingHead(43),
] ]
movingheads[0].rgbw = ( 59, 130, 246, 0) # blue movingheads[0].rgbw = (59, 130, 246, 0) # blue
movingheads[1].rgbw = (245, 158, 11, 0) # yellow movingheads[1].rgbw = (245, 158, 11, 0) # yellow
movingheads[2].rgbw = (239, 68, 68, 0) # red movingheads[2].rgbw = (239, 68, 68, 0) # red
movingheads[3].rgbw = ( 16, 185, 129, 0) # green movingheads[3].rgbw = (16, 185, 129, 0) # green
for head in movingheads: for head in movingheads:
head.pan = -0.5 * math.pi head.pan = -0.5 * math.pi
@ -83,7 +92,7 @@ if __name__ == "__main__":
# pygame initialization # pygame initialization
pygame.init() pygame.init() # pylint: disable=no-member; wtf?
screen = pygame.display.set_mode((420, 69)) screen = pygame.display.set_mode((420, 69))
pygame.display.set_caption("meh") pygame.display.set_caption("meh")
@ -96,7 +105,7 @@ if __name__ == "__main__":
# main loop # main loop
running = True running = True # this is clearly not constant, see 17 lines below???
with serial.Serial("/dev/ttyUSB0", 500_000) as ser: with serial.Serial("/dev/ttyUSB0", 500_000) as ser:
@ -107,13 +116,12 @@ if __name__ == "__main__":
if b.strip() == b"Sync.": if b.strip() == b"Sync.":
return return
sync() sync()
while running: while running:
for event in pygame.event.get(): for event in pygame.event.get():
if event.type == pygame.QUIT: if event.type == pygame.QUIT: # pylint: disable=no-member;
running = False running = False
# axes: # axes:
@ -135,7 +143,12 @@ if __name__ == "__main__":
# strumm bar # strumm bar
(_, bar) = gamepad.get_hat(0) (_, bar) = gamepad.get_hat(0)
print(f"pitch: {pitch:+0.2f}, whammy: {whammy:+0.2f}, buttons: {button_state}, bar: {bar: 1}") print(
f"pitch: {pitch:+0.2f}, "
f"whammy: {whammy:+0.2f}, "
f"buttons: {button_state}, "
f"bar: {bar: 1}"
)
# render # render
@ -147,16 +160,22 @@ if __name__ == "__main__":
for head in movingheads: for head in movingheads:
head.tilt = tilt head.tilt = tilt
whammy_0_1 = (whammy + 1) / 2
ANGLE_HOME = -0.5 * math.pi ANGLE_HOME = -0.5 * math.pi
ANGLE_OUTER = 0.5235988 ANGLE_OUTER = 0.5235988
ANGLE_INNER = 0.2617994 ANGLE_INNER = 0.2617994
movingheads[0].pan = rescale(whammy_0_1, (0, 1), (ANGLE_HOME, ANGLE_HOME + ANGLE_OUTER)) movingheads[0].pan = rescale(
movingheads[1].pan = rescale(whammy_0_1, (0, 1), (ANGLE_HOME, ANGLE_HOME + ANGLE_INNER)) whammy, (-1, 1), (ANGLE_HOME, ANGLE_HOME + ANGLE_OUTER)
movingheads[2].pan = rescale(whammy_0_1, (0, 1), (ANGLE_HOME, ANGLE_HOME - ANGLE_INNER)) )
movingheads[3].pan = rescale(whammy_0_1, (0, 1), (ANGLE_HOME, ANGLE_HOME - ANGLE_OUTER)) movingheads[1].pan = rescale(
whammy, (-1, 1), (ANGLE_HOME, ANGLE_HOME + ANGLE_INNER)
)
movingheads[2].pan = rescale(
whammy, (-1, 1), (ANGLE_HOME, ANGLE_HOME - ANGLE_INNER)
)
movingheads[3].pan = rescale(
whammy, (-1, 1), (ANGLE_HOME, ANGLE_HOME - ANGLE_OUTER)
)
for head in movingheads: for head in movingheads:
# print(head) # print(head)
@ -174,4 +193,4 @@ if __name__ == "__main__":
except KeyboardInterrupt: except KeyboardInterrupt:
running = False running = False
pygame.quit() pygame.quit() # pylint: disable=no-member;