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); } }
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); }
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(); }
static DisplayFrame() { Full = new DisplayFrame(DisplayCharacter.Full, true); Empty = new DisplayFrame(DisplayCharacter.Empty, false); }
public static void WriteDecimal(this DisplayDriver driver, decimal value, StatusLed signLed = StatusLed.Blue) { driver.WriteFrame(DisplayFrame.FromDecimal(value, signLed)); }
public static void WriteString(this DisplayDriver driver, string str) { driver.WriteFrame(DisplayFrame.FromString(str)); }