Exemplo n.º 1
0
        public static async Task ScrollString(this DisplayDriver driver, string str, int duration)
        {
            var displayString  = DisplayFrame.GetString(str).ToArray();
            int scrollInterval = duration / (displayString.Length + 6);

            // Start with a blank frame
            var frame = DisplayFrame.Empty;

            driver.WriteFrame(frame);
            await Task.Delay(scrollInterval);

            // Push each character in from the right, one at a time
            foreach (var c in displayString)
            {
                frame = frame.WithPushedCharacter(c);
                driver.WriteFrame(frame);
                await Task.Delay(scrollInterval);
            }

            // Push three more blank characters to end off with a blank screen
            for (int i = 0; i < 3; i++)
            {
                frame = frame.WithPushedCharacter(DisplayCharacter.Empty);
                driver.WriteFrame(frame);
                await Task.Delay(scrollInterval);
            }
        }
Exemplo n.º 2
0
        public static DisplayFrame FromDecimal(decimal value, StatusLed signLed)
        {
            if (value < MinDecimalValue || value > MaxDecimalValue)
            {
                throw new ArgumentOutOfRangeException(nameof(value));
            }

            bool sign = value < 0m;

            value = Math.Abs(value);

            int integerDigits    = value.NumIntegerDigits();
            int fractionalDigits = value.NumFractionalDigits();
            int totalDigits      = integerDigits + fractionalDigits;

            if (totalDigits > CharacterCount)
            {
                value            = Decimal.Round(value, CharacterCount - integerDigits);
                totalDigits      = CharacterCount;
                fractionalDigits = totalDigits - integerDigits;
            }

            var frame = new DisplayFrame();

            for (int i = 0; i < integerDigits; i++)
            {
                bool dot       = (i == integerDigits - 1) && (fractionalDigits > 0);
                var  character = DisplayCharacter.FromDigit(value.GetDigit(integerDigits - i - 1), dot);
                frame = frame.WithCharacter(totalDigits - i - 1, character);
            }

            for (int i = 0; i < fractionalDigits; i++)
            {
                var character = DisplayCharacter.FromDigit(value.GetDigit(-i - 1));
                frame = frame.WithCharacter(fractionalDigits - i - 1, character);
            }

            if (sign)
            {
                if (totalDigits == CharacterCount)
                {
                    frame = frame.WithStatus(signLed, true);
                }
                else
                {
                    var character = DisplayCharacter.FromSymbol('-');
                    frame = frame.WithCharacter(totalDigits, character);
                }
            }

            return(frame);
        }
Exemplo n.º 3
0
        public void WriteFrame(DisplayFrame frame)
        {
            frame.ThrowIfNull(nameof(frame));

            foreach (var character in frame.Characters)
            {
                LedDriver.WriteByte(character.Value);
            }

            for (int i = 0; i < 5; i++)
            {
                LedDriver.WriteBit(false);
            }

            LedDriver.WriteBit(frame.StatusLeds[StatusLed.Green]);
            LedDriver.WriteBit(frame.StatusLeds[StatusLed.Blue]);
            LedDriver.WriteBit(frame.StatusLeds[StatusLed.Red]);

            LedDriver.Latch();
        }
Exemplo n.º 4
0
 static DisplayFrame()
 {
     Full  = new DisplayFrame(DisplayCharacter.Full, true);
     Empty = new DisplayFrame(DisplayCharacter.Empty, false);
 }
Exemplo n.º 5
0
 public static void WriteDecimal(this DisplayDriver driver, decimal value, StatusLed signLed = StatusLed.Blue)
 {
     driver.WriteFrame(DisplayFrame.FromDecimal(value, signLed));
 }
Exemplo n.º 6
0
 public static void WriteString(this DisplayDriver driver, string str)
 {
     driver.WriteFrame(DisplayFrame.FromString(str));
 }