/// <summary> /// Scrolls a series of images across the microbit screen. /// </summary> /// <param name="images">The list of images to scroll.</param> /// <param name="delayMs">The delay between scroll steps.</param> /// <param name="brightness">The brightness of the screen.</param> public void ScrollImages(List <MicroBitImage> images, int delayMs = DefaultScrollSpeed, int brightness = DefaultBrightness) { if (!_port.IsOpen || _status != EDeviceStatus.READY) { return; } if (images.Count() == 0 || images.Count() > 0xff) { return; } if (delayMs < 0 || delayMs > 0xffff) { return; } if (brightness < 0 || brightness > 0xff) { return; } if (DisplayBusy) { // System.Diagnostics.Debug.WriteLine("Display Busy"); return; } // Block the display. int durationMs = images.Count * delayMs * 5; _displayFreeTime = DateTime.Now + TimeSpan.FromMilliseconds(durationMs); MicroBitMessageWriter writer = new MicroBitMessageWriter(); writer.WriteChar(Protocol.CMD_SCROLL_IMAGES); writer.WriteU16Hex(delayMs); writer.WriteU8Hex(brightness); writer.WriteU8Hex(images.Count()); foreach (MicroBitImage image in images) { string packed = image.Packed; writer.WriteChars(packed); } QueueForSend(writer.ToString()); }
/// <summary> /// Prints a series of images across the microbit screen, each with its own brightness and duration. /// </summary> /// <param name="frames">The set of display frames to print.</param> public void PrintDisplayFrames(IEnumerable <MicroBitDisplayFrame> frames) { if (!_port.IsOpen || _status != EDeviceStatus.READY) { return; } if (frames.Count() == 0 || frames.Count() > 0xff) { return; } if (DisplayBusy) { // System.Diagnostics.Debug.WriteLine("Display Busy"); return; } int totalDurationMs = 0; MicroBitMessageWriter writer = new MicroBitMessageWriter(); writer.WriteChar(Protocol.CMD_PRINT_DISPLAY_FRAMES); writer.WriteU8Hex(frames.Count()); foreach (MicroBitDisplayFrame frame in frames) { int durationMs = (int)(frame.Duration * 1000); int brightness = frame.Brightness; string packed = frame.Image.Packed; durationMs = MyMath.Clamp(durationMs, 0, 0xffff); brightness = MyMath.Clamp(brightness, 0, 0xff); writer.WriteU16Hex(durationMs); writer.WriteU8Hex(brightness); writer.WriteChars(packed); totalDurationMs += durationMs; } // Block the display _displayFreeTime = DateTime.Now + TimeSpan.FromMilliseconds(totalDurationMs); QueueForSend(writer.ToString()); }