From d7ed085686c9a6306c3bf58a34faaf8eaa4da9fe Mon Sep 17 00:00:00 2001 From: Kai Vogelgesang Date: Fri, 10 Sep 2021 14:35:36 +0200 Subject: [PATCH] Autoformat guitar hero controller script --- guitarhero/main.py | 81 ++++++++++++++++++++++++++++------------------ 1 file changed, 50 insertions(+), 31 deletions(-) diff --git a/guitarhero/main.py b/guitarhero/main.py index 7ebe65d..ac6351f 100644 --- a/guitarhero/main.py +++ b/guitarhero/main.py @@ -3,10 +3,12 @@ import math import pygame import serial + def clamp(x, ab): (a, b) = ab return max(a, min(b, x)) + def rescale(x, from_limits, to_limits): (a, b) = from_limits x_0_1 = (x - a) / (b - a) @@ -14,6 +16,7 @@ def rescale(x, from_limits, to_limits): (c, d) = to_limits return c + (d - c) * x_0_1 + class MovingHead: def __init__(self, start_addr): self.start_addr = start_addr @@ -25,10 +28,15 @@ class MovingHead: self.rgbw = (0, 0, 0, 0) 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): - + pan = rescale(self.pan, (-1.5 * math.pi, 1.5 * math.pi), (255, 0)) pan = clamp(int(pan), (0, 255)) pan_fine = 0 @@ -62,6 +70,7 @@ class MovingHead: dst[offset : offset + len(channels)] = channels + if __name__ == "__main__": movingheads = [ @@ -71,19 +80,19 @@ if __name__ == "__main__": MovingHead(43), ] - movingheads[0].rgbw = ( 59, 130, 246, 0) # blue - movingheads[1].rgbw = (245, 158, 11, 0) # yellow - movingheads[2].rgbw = (239, 68, 68, 0) # red - movingheads[3].rgbw = ( 16, 185, 129, 0) # green + movingheads[0].rgbw = (59, 130, 246, 0) # blue + movingheads[1].rgbw = (245, 158, 11, 0) # yellow + movingheads[2].rgbw = (239, 68, 68, 0) # red + movingheads[3].rgbw = (16, 185, 129, 0) # green for head in movingheads: head.pan = -0.5 * math.pi dmx_data = bytearray(512) - + # pygame initialization - pygame.init() + pygame.init() # pylint: disable=no-member; wtf? screen = pygame.display.set_mode((420, 69)) pygame.display.set_caption("meh") @@ -96,7 +105,7 @@ if __name__ == "__main__": # main loop - running = True + running = True # this is clearly not constant, see 17 lines below??? with serial.Serial("/dev/ttyUSB0", 500_000) as ser: @@ -106,20 +115,19 @@ if __name__ == "__main__": b = ser.readline() if b.strip() == b"Sync.": return - - + sync() while running: - + for event in pygame.event.get(): - if event.type == pygame.QUIT: + if event.type == pygame.QUIT: # pylint: disable=no-member; running = False - + # axes: pitch = gamepad.get_axis(4) # 0 horizontal, -1 up, 1 down whammy = gamepad.get_axis(3) # -1 default, 1 if max. pressed - + # buttons: button_state = [ gamepad.get_button(i) @@ -131,12 +139,17 @@ if __name__ == "__main__": 4, # orange ] ] - + # strumm bar (_, 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 for head_id, button_id in enumerate([3, 2, 1, 0]): @@ -146,22 +159,28 @@ if __name__ == "__main__": tilt = rescale(pitch, (0, 1), (-0.5 * math.pi, 0)) for head in movingheads: 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_INNER = 0.2617994 - - movingheads[0].pan = rescale(whammy_0_1, (0, 1), (ANGLE_HOME, ANGLE_HOME + ANGLE_OUTER)) - movingheads[1].pan = rescale(whammy_0_1, (0, 1), (ANGLE_HOME, ANGLE_HOME + ANGLE_INNER)) - 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[0].pan = rescale( + whammy, (-1, 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: # print(head) head.render(dmx_data) - + ser.write(dmx_data) ser.flush() response = ser.readline() @@ -173,5 +192,5 @@ if __name__ == "__main__": clock.tick(50) except KeyboardInterrupt: running = False - - pygame.quit() \ No newline at end of file + + pygame.quit() # pylint: disable=no-member;