コード例 #1
0
        /// <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());
        }
コード例 #2
0
        /// <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());
        }