Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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();
            }
        }
Ejemplo n.º 4
0
        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);
     }
 }
Ejemplo n.º 6
0
        private void RenderColor(WS281x device, Controller controller, Color color)
        {
            for (int i = 0; controller.LEDCount > i; i++)
            {
                controller.SetLED(i, color);
            }

            device.Render();
        }
Ejemplo n.º 7
0
        public void Render(IEnumerable <Pixel> pixelsToRender)
        {
            foreach (var p in pixelsToRender)
            {
                _ws281x.SetLEDColor(0, p.PixelID, p.PixelColor);
            }

            _ws281x.Render();
        }
Ejemplo n.º 8
0
        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));
                }
            }
        }
Ejemplo n.º 10
0
        private void Render()
        {
            if (_enableAbl)
            {
                VoltAdjust();
            }

            if (_use0)
            {
                _controller0?.SetLEDS(_colors1);
            }

            if (_use1)
            {
                _controller1?.SetLEDS(_colors2);
            }

            if (_use0 || _use1)
            {
                _ws281X?.Render();
            }
        }
Ejemplo n.º 11
0
        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();
        }
Ejemplo n.º 12
0
        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();
        }
Ejemplo n.º 14
0
        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();
        }
Ejemplo n.º 15
0
        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();
                }
            }
        }
Ejemplo n.º 16
0
        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;
                    }
                }
            }
        }