import hyperion, time from random import randint #get args rotationTime = float(hyperion.args.get('rotationTime', 4)) marginPos = float(hyperion.args.get('margin-pos', 2)) # define pacman pacman = bytearray((255, 255, 0)) # define ghosts redGuy = bytearray((255, 0, 0)) pinkGuy = bytearray((255, 184, 255)) blueGuy = bytearray((0, 255, 255)) slowGuy = bytearray((255, 184, 81)) light = bytearray((255, 184, 174)) background = bytearray((0, 0, 0)) #helper posPac = 1 diffPac = 6*marginPos diffGuys = 3*marginPos sleepTime = max(0.02,rotationTime/hyperion.ledCount) posPinkGuy = posPac + diffPac posBlueGuy = posPinkGuy + diffGuys posSlowGuy = posBlueGuy + diffGuys posRedGuy = posSlowGuy + diffGuys # initialize the led data ledDataEscape = bytearray() for i in range(hyperion.ledCount): if i == 1: ledDataEscape += pacman elif i == posPinkGuy: ledDataEscape += pinkGuy elif i == posBlueGuy: ledDataEscape += blueGuy elif i == posSlowGuy: ledDataEscape += slowGuy elif i == posRedGuy: ledDataEscape += redGuy else: ledDataEscape += background ledDataChase = bytearray() for i in range(hyperion.ledCount): if i == 1: ledDataChase += pacman elif i in [posPinkGuy, posBlueGuy, posSlowGuy, posRedGuy]: ledDataChase += bytearray((33, 33, 255)) else: ledDataChase += background # increment = 3, because LED-Color is defined by 3 Bytes increment = 3 def shiftLED(ledData, increment, limit, lightPos=None): state = 0 while state < limit and not hyperion.abort(): ledData = ledData[increment:] + ledData[:increment] if (lightPos): tmp = ledData[lightPos] ledData[lightPos] = light hyperion.setColor(ledData) if (lightPos): ledData[lightPos] = tmp time.sleep(sleepTime) state += 1 # start the write data loop while not hyperion.abort(): # escape mode ledData = ledDataEscape shiftLED(ledData, increment, hyperion.ledCount) random = randint(10,hyperion.ledCount) # escape mode + power pellet s = slice(3*random, 3*random+3) shiftLED(ledData, increment, hyperion.ledCount - random, s) # chase mode shift = 3*(hyperion.ledCount - random) ledData = ledDataChase[shift:]+ledDataChase[:shift] shiftLED(ledData, -increment, 2*hyperion.ledCount-random) time.sleep(sleepTime)