import * as ws281x from 'rpi-ws281x' const fade_ticks = global.cfg.fade_ticks || 10; var pixels = new Uint32Array(global.cfg.leds); var pixel_cache = new Uint32Array(global.cfg.leds); var next_pattern = new Uint32Array(global.cfg.leds); var pattern = {} ws281x.configure({ leds: global.cfg.leds || 300, brightness: global.cfg.brightness || 200, gpio: global.cfg.gpio || 18, stripType: global.cfg.type || 'grb' }); export function set_pattern(pat) { pattern = pat } function tick_pattern() { // do the parsing stuff here var r = Math.floor(Math.random() * 100) var g = Math.floor(Math.random() * 100); var b = Math.floor(Math.random() * 100); for (let i = 0; i < global.cfg.leds; i++) { if (i % 3 == 0) { next_pattern[i] = r; next_pattern[i + 1] = g; next_pattern[i + 2] = b; } } } export function tick() { var changed = false; for (let i = 0; i < global.cfg.leds; i++) { if (next_pattern[i] != pixels[i]) { changed = true; fade(i); } } if (!changed) { tick_pattern(); } ws281x.render(pixels); } function fade(index) { var original = pixel_cache[index]; var final = next_pattern[index]; var diff = final - original; var interval = diff / fade_ticks; if (Math.abs(final - pixels[index]) < interval) { pixels[index] = final; pixel_cache[index] = final; } else { pixels[index] += interval; } }