mirror of
https://github.com/brmlab/ledbar.git
synced 2025-06-09 13:24:01 +02:00
50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
#!/usr/bin/python
|
|
# vim:et:sw=4:ts=4:sts=4
|
|
|
|
import sys
|
|
import time
|
|
|
|
class Ledbar:
|
|
|
|
def __init__(self, boxes=20, secs_per_frame=0.025):
|
|
self.boxes = boxes
|
|
self.secs_per_frame = secs_per_frame
|
|
self.last_update = time.time()
|
|
self.pixels = []
|
|
for i in xrange(boxes):
|
|
self.pixels.append([0, 0, 0])
|
|
|
|
def set_pixel(self, pixel, red, green, blue):
|
|
self.set_red(pixel, red)
|
|
self.set_green(pixel, green)
|
|
self.set_blue(pixel, blue)
|
|
|
|
def set_red(self, pixel, red):
|
|
if red < 0.0 or red > 1.0: raise ValueError('red has to be between 0.0 and 1.0')
|
|
self.pixels[pixel][0] = int(red*255.99)
|
|
|
|
def set_green(self, pixel, green):
|
|
if green < 0.0 or green > 1.0: raise ValueError('green has to be between 0.0 and 1.0')
|
|
self.pixels[pixel][1] = int(green*255.99)
|
|
|
|
def set_blue(self, pixel, blue):
|
|
if blue < 0.0 or blue > 1.0: raise ValueError('blue has to be between 0.0 and 1.0')
|
|
self.pixels[pixel][2] = int(blue*255.99)
|
|
|
|
def echo(self, s, no_newline=False):
|
|
sys.stderr.write(str(s) + ('' if no_newline else '\n'))
|
|
|
|
def update(self):
|
|
now = time.time()
|
|
delta = now - self.last_update
|
|
if delta < self.secs_per_frame:
|
|
time.sleep(self.secs_per_frame - delta)
|
|
try:
|
|
for p in self.pixels:
|
|
for c in p:
|
|
sys.stdout.write(chr(c))
|
|
sys.stdout.flush()
|
|
except IOError:
|
|
return False
|
|
self.last_update += self.secs_per_frame
|
|
return True
|