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));
                }
            }
        }
예제 #2
0
        public void Execute(AbortRequest request, int gpioPin)
        {
            Console.Clear();
            Console.Write("How many LEDs do you want to use: ");

            var ledCount = Int32.Parse(Console.ReadLine());
            var settings = Settings.CreateDefaultSettings();
            var pin      = Pin.Gpio18;

            if (gpioPin == 19)
            {
                pin = Pin.Gpio19;
            }

            if (gpioPin == 10)
            {
                pin = Pin.Gpio10;
            }

            if (gpioPin == 21)
            {
                pin = Pin.Gpio21;
            }
            var controller = settings.AddController(ledCount, pin, StripType.WS2811_STRIP_RGB);

            using var device = new WS281x(settings);
            var colors = GetAnimationColors();

            while (!request.IsAbortRequested)
            {
                for (var i = 0; i < controller.LEDCount; i++)
                {
                    var colorIndex = (i + colorOffset) % colors.Count;
                    device.SetLed(i, colors[colorIndex]);
                }
                device.Render();
                colorOffset = (colorOffset + 1) % colors.Count;

                Thread.Sleep(500);
            }
            device.Reset();
        }