private void Demo() { var wlData = DataUtil.GetCollection <WLedData>("wled"); var strips = new List <WLedStrip>(); foreach (var wl in wlData) { strips.Add(new WLedStrip(wl)); } foreach (var s in strips) { s.StartStream(); } for (var i = 0; i < _ledCount; i++) { var pi = i * 1.0f; var progress = pi / _ledCount; var rCol = Rainbow(progress); _controller.SetLED(i, rCol); _strip.Render(); foreach (var s in strips) { // Total index of LEDs var lastIndex = s.Data.LedCount + s.Data.Offset; // Value we should start at if the strip loops var reStartIndex = -1; var reStartStop = 0; // If we have more LEDs in index than count, start from zero if (lastIndex > _ledCount) { reStartIndex = 0; reStartStop = lastIndex - _ledCount; } // If i is between offset or end of all colors, set that pixel if (s.Data.Offset >= i && i <= s.Data.LedCount) { s.UpdatePixel(i, rCol); } else if (reStartIndex <= i && i < reStartStop) { s.UpdatePixel(i, rCol); } } } foreach (var s in strips) { s.StopStream(); } System.Threading.Thread.Sleep(500); StopLights(); }
protected override void ProcessRecord() { if (NumberOfCycles == 0) { NumberOfCycles = 1; } Settings settings = Settings.CreateDefaultSettings(); settings.Channel = new Channel(NumberOfLeds, GpioPin, Brightness, Invert, StripType.WS2812_STRIP); WS281x controller = new WS281x(settings); List <Color> colors = GetColors(); for (int iterations = 0; iterations < NumberOfCycles; ++iterations) { for (int colorCycle = 0; colorCycle < colors.Count; ++colorCycle) { Color currentColor = colors[colorCycle]; for (int i = 0; i < NumberOfLeds; ++i) { //Iterate over all LEDs and display the current color controller.SetLEDColor(i, currentColor); controller.Render(); Thread.Sleep(25); } } } }
public void Execute(AbortRequest request) { Console.Clear(); Console.Write("How many LEDs do you want to use: "); var ledCount = Int32.Parse(Console.ReadLine()); var settings = Settings.CreateDefaultSettings(); var controller = settings.AddController(ledCount, Pin.Gpio18, StripType.WS2811_STRIP_RGB); using (var device = new WS281x(settings)) { var colors = GetAnimationColors(); while (!request.IsAbortRequested) { for (int i = 0; i < controller.LEDCount; i++) { var colorIndex = (i + colorOffset) % colors.Count; controller.SetLED(i, colors[colorIndex]); } device.Render(); colorOffset = (colorOffset + 1) % colors.Count; Thread.Sleep(500); } device.Reset(); } }
protected override void ProcessRecord() { if (ExplosionColor == Color.Empty) { ExplosionColor = Color.OrangeRed; } if (string.IsNullOrEmpty(Speed)) { Speed = "Medium"; } Settings settings = Settings.CreateDefaultSettings(); settings.Channel = new Channel(NumberOfLeds, GpioPin, Brightness, Invert, StripType.WS2812_STRIP); WS281x controller = new WS281x(settings); int leftSideIterations = NumberOfLeds / 2; // If it's even, both sides will have the same amount of iterations, otherwise make right side have one more int rightSideIterations = (NumberOfLeds % 2 == 0) ? leftSideIterations : leftSideIterations + 1; int totalIterations = 0, leftSide = 0, rightSide = NumberOfLeds - 1; for (; totalIterations < rightSideIterations; ++totalIterations) { controller.SetLEDColor(leftSide++, LeftSideColor); controller.SetLEDColor(rightSide--, RightSideColor); controller.Render(); Thread.Sleep(_speedTranslation[Speed]); } for (; totalIterations >= 0; --totalIterations) { controller.SetLEDColor(leftSide--, ExplosionColor); controller.SetLEDColor(rightSide++, ExplosionColor); controller.Render(); Thread.Sleep(10); } //Thread.Sleep(_speedTranslation[Speed]); //controller.SetColorOnAllLEDs(ExplosionColor); //controller.Render(); //for some reason it has to be explicitly disposed controller.Dispose(); }
protected static void Wipe(WS281x controller, Color color) { for (int i = 0; i <= controller.Settings.Channels[0].LEDs.Count - 1; i++) { controller.SetLEDColor(0, i, color); controller.Render(); System.Threading.Thread.Sleep(1000 / 15); } }
private void RenderColor(WS281x device, Controller controller, Color color) { for (int i = 0; controller.LEDCount > i; i++) { controller.SetLED(i, color); } device.Render(); }
public void Render(IEnumerable <Pixel> pixelsToRender) { foreach (var p in pixelsToRender) { _ws281x.SetLEDColor(0, p.PixelID, p.PixelColor); } _ws281x.Render(); }
private static void Wipe(WS281x device, Color color) { var controller = device.GetController(ControllerType.PWM0); for (int i = 0; i < controller.LEDCount; i++) { controller.SetLED(i, color); device.Render(); System.Threading.Thread.Sleep(1000 / 15); } }
public void FlamePattern(CancellationToken token, Pixels pixels) { var random = new Random(); using (var rpi = new WS281x(settings)) { int r, g, b; if (pixels.r > pixels.g && pixels.r > pixels.b) { r = 226; g = 121; b = 35; } else if (pixels.g > pixels.r && pixels.g > pixels.b) { r = 74; g = 150; b = 12; } else if (pixels.b > pixels.r && pixels.b > pixels.r) { r = 158; g = 8; b = 148; } else { r = 226; g = 121; b = 35; } while (true) { if (token.IsCancellationRequested) { this.logger.Information("Cancelling Lightning Pattern..."); break; } for (int i = 0; i < 46; i++) { int flicker = (int)(55 * random.NextDouble()); int r1 = r - flicker, g1 = g - flicker, b1 = b - flicker; if (r1 < 0) { r1 = 0; } if (g1 < 0) { g1 = 0; } if (b1 < 0) { b1 = 0; } rpi.SetLed(i, Color.FromArgb(255, r1, g1, b1)); } rpi.Render(); Thread.Sleep(random.Next(10, 133)); } } }
private void Render() { if (_enableAbl) { VoltAdjust(); } if (_use0) { _controller0?.SetLEDS(_colors1); } if (_use1) { _controller1?.SetLEDS(_colors2); } if (_use0 || _use1) { _ws281X?.Render(); } }
protected override void ProcessRecord() { Settings settings = Settings.CreateDefaultSettings(); settings.Channel = new Channel(NumberOfLeds, GpioPin, Brightness, Invert, StripType.WS2812_STRIP); WS281x controller = new WS281x(settings); for (int i = 0; i < NumberOfLeds; ++i) { for (int j = 0; j < i; ++j) { controller.SetLEDColor(j, Color.Empty); } controller.SetLEDColor(i, Color); controller.Render(); Thread.Sleep(_speedTranslation[Speed]); } //"hack". turn the last led off controller.SetLEDColor(NumberOfLeds - 1, Color.Empty); controller.Render(); //for some reason it has to be explicitly disposed controller.Dispose(); }
private static void Wipe(WS281x device, Color color) { var controller = device.GetController(); foreach (var led in controller.LEDs) { led.Color = color; device.Render(true); // by manipulating the LED directly instead of using the controller, the IsDirty state is lost. // nothing will get rendered // wait for a minimum of 5 milliseconds var waitPeriod = (int)Math.Max(500.0 / controller.LEDCount, 5.0); Thread.Sleep(waitPeriod); } }
protected override void WriteLed(AnalysisResult result) { var theme = Theme; if (theme == null) { return; } var colors = new LedColor[_controller.LEDCount]; foreach (var colorRange in theme.ColorRanges) { ConfigureColors(result, colors, colorRange); } for (var i = 0; i < colors.Length; i++) { var color = colors[i] * Brightness; color.Red = Limit(color.Red); color.Green = Limit(color.Green); color.Blue = Limit(color.Blue); colors[i] = color; var col = color.AsColor(); _controller.SetLED(i, col); } var log = Log; if (log != null && _lastColors != null) { int index = 0; foreach (var colorPair in colors.Zip(_lastColors)) { if (colorPair.First != colorPair.Second) { var col = colorPair.First.AsColor(); log.Verbose($"[{index.ToString("000")}] R:{col.R} G:{col.G} B:{col.B}"); } index++; } } _lastColors = colors; _device.Render(); }
public override void Update(FrameState frame) { if ((_controller == null) || (_device == null)) { return; } var width = _screen.Width; var height = _screen.Height; for (var y = 0; y < height; y++) { for (var x = 0; x < width; x++) { var id = y * width + x; var color = frame[x, y]; _controller.SetLED(id, System.Drawing.Color.FromArgb(color.A, color.R, color.G, color.B)); } } _device.Render(); }
static void Main(string[] args) { Console.WriteLine("Hello World!"); var settings = Settings.CreateDefaultSettings(); //Use 16 LEDs and GPIO Pin 18. //Set brightness to maximum (255) //Use Unknown as strip type. Then the type will be set in the native assembly. settings.Channels[0] = new Channel(12, 18, 255, false, StripType.WS2812_STRIP); using (var rpi = new WS281x(settings)) { while (true) { // draw an X rpi.SetLEDColor(0, 0, Color.Red); rpi.SetLEDColor(0, 2, Color.Red); rpi.SetLEDColor(0, 4, Color.Red); rpi.SetLEDColor(0, 6, Color.Red); rpi.SetLEDColor(0, 8, Color.Red); rpi.Render(); Thread.Sleep(3000); // clean rpi.SetLEDColor(0, 0, Color.Black); rpi.SetLEDColor(0, 2, Color.Black); rpi.SetLEDColor(0, 4, Color.Black); rpi.SetLEDColor(0, 6, Color.Black); rpi.SetLEDColor(0, 8, Color.Black); rpi.Render(); for (int i = 0; i < 10; i++) { rpi.SetLEDColor(0, 2, Color.Black); rpi.SetLEDColor(0, 6, Color.Black); rpi.SetLEDColor(0, 1, Color.Blue); rpi.SetLEDColor(0, 4, Color.Blue); rpi.SetLEDColor(0, 7, Color.Blue); rpi.Render(); Thread.Sleep(150); rpi.SetLEDColor(0, 1, Color.Black); rpi.SetLEDColor(0, 7, Color.Black); rpi.SetLEDColor(0, 0, Color.Blue); rpi.SetLEDColor(0, 8, Color.Blue); rpi.Render(); Thread.Sleep(150); rpi.SetLEDColor(0, 0, Color.Black); rpi.SetLEDColor(0, 8, Color.Black); rpi.SetLEDColor(0, 3, Color.Blue); rpi.SetLEDColor(0, 5, Color.Blue); rpi.Render(); Thread.Sleep(150); rpi.SetLEDColor(0, 3, Color.Black); rpi.SetLEDColor(0, 5, Color.Black); rpi.SetLEDColor(0, 2, Color.Blue); rpi.SetLEDColor(0, 6, Color.Blue); rpi.Render(); Thread.Sleep(150); } // clean rpi.SetLEDColor(0, 2, Color.Black); rpi.SetLEDColor(0, 4, Color.Black); rpi.SetLEDColor(0, 6, Color.Black); rpi.Render(); // draw checked rpi.SetLEDColor(0, 1, Color.Green); rpi.SetLEDColor(0, 3, Color.Green); rpi.SetLEDColor(0, 7, Color.Green); rpi.SetLEDColor(0, 11, Color.Green); rpi.Render(); Thread.Sleep(3000); // clean rpi.SetLEDColor(0, 1, Color.Black); rpi.SetLEDColor(0, 3, Color.Black); rpi.SetLEDColor(0, 7, Color.Black); rpi.SetLEDColor(0, 11, Color.Black); rpi.Render(); } } }
public void Execute(AbortRequest request) { Console.Clear(); Console.Write("How many LEDs to you want to use: "); var ledCount = Int32.Parse(Console.ReadLine()); //The default settings uses a frequency of 800000 Hz and the DMA channel 10. var settings = Settings.CreateDefaultSettings(); //Set brightness to maximum (255) //Use Unknown as strip type. Then the type will be set in the native assembly. settings.Channels[0] = new Channel(ledCount, 18, 255, false, StripType.WS2812_STRIP); var controller = new WS281x(settings); //int ledIndex = 0; //int rad = 0; //int green = 0; //int blue = 0; while (!request.IsAbortRequested) { //Console.Write("rad,green,blue");//"ledIndex,rad,green,blue"); //string input = Console.ReadLine(); //string[] split = input.Split(','); ////ledIndex = Convert.ToInt16(split[0]); //rad = Convert.ToInt16(split[0]); //green = Convert.ToInt16(split[1]); //blue = Convert.ToInt16(split[2]); int maxBrigtness = 100; bool flg = false; for (int blue = 0; blue < maxBrigtness; blue++) { for (int green = 0; green < maxBrigtness; green++) { for (int rad = 0; rad < maxBrigtness; rad++) { for (int i = 0; i < ledCount; i++) { controller.SetLEDColor(0, i, Color.FromArgb(rad, green, blue)); } controller.Render(); //System.Threading.Thread.Sleep(10); if (!request.IsAbortRequested) { break; } } for (int rad = maxBrigtness; rad > 0; rad--) { for (int i = 0; i < ledCount; i++) { controller.SetLEDColor(0, i, Color.FromArgb(rad, green, blue)); } controller.Render(); //System.Threading.Thread.Sleep(10); if (!request.IsAbortRequested) { break; } } if (flg) { break; } } for (int green = maxBrigtness; green > 0; green--) { for (int i = 0; i < ledCount; i++) { controller.SetLEDColor(0, i, Color.FromArgb(0, green, blue)); } controller.Render(); //System.Threading.Thread.Sleep(10); if (!request.IsAbortRequested) { break; } } if (flg) { break; } } } }