81 lines
2.5 KiB
Python
81 lines
2.5 KiB
Python
import wpilib
|
|
import math
|
|
|
|
class MyRobot(wpilib.TimedRobot):
|
|
def robotInit(self):
|
|
self.width = 84
|
|
self.height = 56
|
|
|
|
self.buffer = wpilib.AddressableLED.LEDData(self.width * self.height)
|
|
|
|
self.leds = wpilib.AddressableLED(0)
|
|
self.leds.setLength(self.width * self.height)
|
|
self.leds.start()
|
|
|
|
self.hsvShift = 0
|
|
|
|
self.plasma = [[0] * self.width] * self.height
|
|
|
|
for i in range(self.width):
|
|
for j in range(self.height):
|
|
self.plasma[i][j] = int((128.0 + (128.0 * math.sin(i / 4.0)) + 128.0 + (128.0 * math.sin(j / 4.0))) / 2)
|
|
|
|
self.palette = [0] * 256
|
|
|
|
for i in range(len(self.palette)):
|
|
self.palette[i] = self.__hsvToColor(self.__map(i, 0, 255, 0, 359), 1, 1)
|
|
|
|
def robotPeriodic(self):
|
|
for i in range(self.width):
|
|
for j in range(self.height):
|
|
position = (self.plasma[i][j] + self.hsvShift) % 256
|
|
|
|
self.buffer.setLED((j * self.width) + i, self.palette[position])
|
|
|
|
self.hsvShift += 1
|
|
self.leds.setData(self.buffer)
|
|
|
|
def autonomousInit(self):
|
|
pass
|
|
|
|
def autonomousPeriodic(self):
|
|
pass
|
|
|
|
def teleopInit(self):
|
|
pass
|
|
|
|
def teleopPeriodic(self):
|
|
pass
|
|
|
|
def __map(self, x, inMin, inMax, outMin, outMax):
|
|
return int((x - inMin) * (outMax - outMin) / (inMax - inMin) + outMin)
|
|
|
|
def __hsvToColor(self, h, s, v):
|
|
if s == 0:
|
|
return wpilib.Color(wpilib.Color8Bit(int(v * 255.0), int(v * 255.0), int(v * 255.0)))
|
|
|
|
htemp = h / 60.0
|
|
i = int(math.floor(htemp))
|
|
|
|
f = htemp - i
|
|
p = v * (1.0 - s)
|
|
q = v * (1.0 - s * f)
|
|
t = v * (1.0 - s * (1.0 - f))
|
|
|
|
if i == 0:
|
|
return wpilib.Color(wpilib.Color8Bit(int(v * 255.0), int(t * 255.0), int(p * 255.0)))
|
|
elif i == 1:
|
|
return wpilib.Color(wpilib.Color8Bit(int(q * 255.0), int(v * 255.0), int(p * 255.0)))
|
|
elif i == 2:
|
|
return wpilib.Color(wpilib.Color8Bit(int(p * 255.0), int(v * 255.0), int(t * 255.0)))
|
|
elif i == 3:
|
|
return wpilib.Color(wpilib.Color8Bit(int(p * 255.0), int(q * 255.0), int(v * 255.0)))
|
|
elif i == 4:
|
|
return wpilib.Color(wpilib.Color8Bit(int(t * 255.0), int(p * 255.0), int(v * 255.0)))
|
|
elif i == 5:
|
|
return wpilib.Color(wpilib.Color8Bit(int(v * 255.0), int(p * 255.0), int(q * 255.0)))
|
|
else:
|
|
return wpilib.Color(0, 0, 0)
|
|
|
|
if __name__ == "__main__":
|
|
wpilib.run(MyRobot) |