diff --git a/pyleds/lib/Litsimaja.py b/pyleds/lib/Litsimaja.py index feca951..422426a 100644 --- a/pyleds/lib/Litsimaja.py +++ b/pyleds/lib/Litsimaja.py @@ -2,15 +2,18 @@ from rpi_ws281x import PixelStrip # from lib.strip.WindowStrip import WindowStrip # from lib.strip.TkinterStrip import TkinterStrip from lib.LoopSwitch import LoopSwitch +from lib.Regions import Regions class Litsimaja(object): _loops: [] + _regions: Regions def __init__(self): self._strip = PixelStrip(290, 18, 800000, 10, False, 255, 0, 4104) self._loops = [] self._strip.begin() + self._regions: Regions = Regions(self.count_pixels(), [46, 96, 191, 241]) def count_pixels(self) -> int: return self._strip.numPixels() @@ -19,7 +22,10 @@ class Litsimaja(object): return self._strip def set_pixel_color(self, n: int, color: int) -> None: - self._strip.setPixelColor(n, color) + if self._regions.is_pixel_enabled(n): + self._strip.setPixelColor(n, color) + else: + self._strip.setPixelColor(n, 0) def show(self) -> None: self._strip.show() @@ -32,3 +38,9 @@ class Litsimaja(object): for loop in self._loops: loop.stop() self._loops.clear() + + def switch_region(self, region_id: int): + self._regions.switch_region(region_id) + + def get_region_ids(self): + return self._regions.list_region_ids() diff --git a/pyleds/lib/Regions.py b/pyleds/lib/Regions.py new file mode 100644 index 0000000..7fa07ce --- /dev/null +++ b/pyleds/lib/Regions.py @@ -0,0 +1,35 @@ +class Regions(object): + _pixelsEnabled: [] = [] + _regions: [] = [] + + def __init__(self, strip_length: int, splitters: []): + self._length: int = strip_length + start_pixel = 0 + for i in splitters: + if i > self._length: + raise ValueError('splitter out of bounds, you idiot') + self._regions.append([start_pixel, i + 1, True]) + start_pixel = i + 1 + + self._regions.append([start_pixel, self._length, True]) + for i in range(self._length): + self._pixelsEnabled.append(True) + + def region_switch(self, region_id: int, enabled: bool): + pixel_region = self._regions[region_id] + for i in range(pixel_region[0], pixel_region[1]): + self._pixelsEnabled[i] = enabled + self._regions[region_id][2] = enabled + + def is_pixel_enabled(self, pixel_id: int): + return self._pixelsEnabled[pixel_id] + + def switch_region(self, region_id: int): + status: bool = self._regions[region_id][2] + self.region_switch(region_id, not status) + + def list_region_ids(self): + result = [] + for i in range(len(self._regions)): + result.append(i) + return result diff --git a/pyleds/run.py b/pyleds/run.py index 82c2dca..ca0bc3e 100755 --- a/pyleds/run.py +++ b/pyleds/run.py @@ -24,7 +24,11 @@ app = Flask(__name__, static_url_path='', static_folder='templates') @app.route('/', methods=['GET']) def respondroot(): - return render_template('index.html', programs=Pl.list_all(True)) + return render_template( + 'index.html', + programs=Pl.list_all(True), + regions=lm.get_region_ids(), + ) @app.route('/run') @@ -47,4 +51,10 @@ def run_program(program): return Response(status=200) +@app.route('/region/', methods=['GET']) +def switch_region(region): + lm.switch_region(int(region)) + return Response(status=200) + + app.run('0.0.0.0', 8080) diff --git a/pyleds/templates/index.html b/pyleds/templates/index.html index aec4611..f037ecd 100644 --- a/pyleds/templates/index.html +++ b/pyleds/templates/index.html @@ -70,6 +70,10 @@ function doCancel() { send_get('/crash'); } + + function switchRegion(region_id) { + send_get('/region/' + region_id); + } @@ -83,6 +87,12 @@ +
+

Zone switch

+ {% for region in regions %} + + {% endfor %} +