Пример #1
0
        public async Task initSenseHat()
        {

            // Create sensehat object
            senseHat = await SenseHatFactory.Singleton.Create();

            // Init font
            tinyFont = new TinyFont();
            // Init display
            display = senseHat.Display;
            // Get a copy of the rainbow colors.
            senseHat.Display.Reset();
            // Recreate the font from the serialized bytes.
            BwFont font = BwFont.Deserialize(FontBytes);
            // Get the characters to scroll.
            IEnumerable<BwCharacter> characters = font.GetChars("Error");
            // Create the character renderer.
            BwCharacterRenderer characterRenderer = new BwCharacterRenderer(GetCharacterColor);
            // Create the text scroller.
            textScroller = new TextScroller<BwCharacter>(senseHat.Display, characterRenderer, characters);


            // Update forecast for first time
            getWeather(currentCity);

            // Check joystick every 100 ms
            joystickPollTimer = ThreadPoolTimer.CreatePeriodicTimer(pollJoystick, TimeSpan.FromMilliseconds(50));
            // Check sensor every 2 s
            updateSensorsTimer = ThreadPoolTimer.CreatePeriodicTimer(updateSensors, TimeSpan.FromSeconds(2));
            // Get updated weather every 1 minute
            forecastUpdateTimer = ThreadPoolTimer.CreatePeriodicTimer(updateForecast, TimeSpan.FromMinutes(1));
        }
Пример #2
0
		public void Write(ISenseHatDisplay display, string twoCharText, Color color, int offsetY = 0)
		{
			BwCharacter[] chars = Font.GetChars(twoCharText).ToArray();

			if (chars.Length == 0)
			{
				return;
			}

			if (chars.Length > 2)
			{
				throw new ArgumentException("Max two characters are allowed!", nameof(twoCharText));
			}

			var characterRenderer = new BwCharacterRenderer(pixelMap => color);

			int x = 0;
			foreach (BwCharacter character in chars)
			{
				characterRenderer.Render(display, character, x, offsetY);

				x += 4;
			}
		}
Пример #3
0
		public void Draw(
			ISenseHatDisplay display,
			int offsetX,
			int offsetY,
			bool transparent,
			DisplayDirection direction,
			bool flipHorizontal,
			bool flipVertical)
		{
			int right = offsetX + 7;
			int bottom = offsetY + 7;

			if ((offsetY > 7) || (bottom < 0) || (offsetX > 7) || (right < 0))
			{
				return;
			}

			int spritePixelX0 = _spriteXIndex * 8;
			int spritePixelY0 = _spriteYIndex * 8;

			int spritePixelXOffset;
			int spritePixelYOffset;

			if (offsetX < 0)
			{
				spritePixelXOffset = -offsetX;
				offsetX = 0;
			}
			else
			{
				spritePixelXOffset = 0;
			}

			if (offsetY < 0)
			{
				spritePixelYOffset = -offsetY;
				offsetY = 0;
			}
			else
			{
				spritePixelYOffset = 0;
			}
			if (right > 7)
			{
				right = 7;
			}

			if (bottom > 7)
			{
				bottom = 7;
			}

			bool leftToRight;
			bool topToBottom;
			bool flipAxis;

			PixelSupport.ConvertDirectionParameters(
				direction,
				flipHorizontal,
				flipVertical,
				out leftToRight,
				out topToBottom,
				out flipAxis);

			int xStart;
			int xStep;
			int yStart;
			int yStep;

			if (leftToRight)
			{
				xStart = 0;
				xStep = 1;
			}
			else
			{
				xStart = 7;
				xStep = -1;
				spritePixelXOffset = -spritePixelXOffset;
			}

			if (topToBottom)
			{
				yStart = 0;
				yStep = 1;
			}
			else
			{
				yStart = 7;
				yStep = -1;
				spritePixelYOffset = -spritePixelYOffset;
			}

			int spritePixelY = yStart;

			for (int screenY = offsetY; screenY <= bottom; screenY++)
			{
				int spritePixelX = xStart;

				for (int screenX = offsetX; screenX <= right; screenX++)
				{
					int dX = flipHorizontal
						? 7 - spritePixelXOffset - spritePixelX
						: spritePixelXOffset + spritePixelX;

					int dY = flipVertical
						? 7 - spritePixelYOffset - spritePixelY
						: spritePixelYOffset + spritePixelY;

					Color spriteColor = flipAxis
						? _spriteMap.Pixels[spritePixelX0 + dY, spritePixelY0 + dX]
						: _spriteMap.Pixels[spritePixelX0 + dX, spritePixelY0 + dY];

					if (transparent)
					{
						Color screenColor = display.Screen[screenX, screenY];

						spriteColor = GetTransparentPixel(screenColor, spriteColor);
					}

					display.Screen[screenX, screenY] = spriteColor;

					spritePixelX += xStep;
				}

				spritePixelY += yStep;
			}
		}
Пример #4
0
		public void DrawWrapped(
			ISenseHatDisplay display,
			int offsetX,
			int offsetY,
			bool transparent,
			DisplayDirection direction,
			bool flipHorizontal,
			bool flipVertical)
		{
			int spritePixelX0 = _spriteXIndex * 8;
			int spritePixelY0 = _spriteYIndex * 8;

			if (offsetX < 0)
			{
				offsetX = 8 + (offsetX % 8);
			}

			if (offsetY < 0)
			{
				offsetY = 8 + (offsetY % 8);
			}

			bool leftToRight;
			bool topToBottom;
			bool flipAxis;

			PixelSupport.ConvertDirectionParameters(
				direction,
				flipHorizontal,
				flipVertical,
				out leftToRight,
				out topToBottom,
				out flipAxis);

			int xStart;
			int xStep;
			int yStart;
			int yStep;

			if (leftToRight)
			{
				xStart = 0;
				xStep = 1;
			}
			else
			{
				xStart = 7;
				xStep = -1;
				offsetX = 8 - offsetX;
			}

			if (topToBottom)
			{
				yStart = 0;
				yStep = 1;
			}
			else
			{
				yStart = 7;
				yStep = -1;
				offsetY = 8 - offsetY;
			}

			int spritePixelY = yStart;

			for (int screenY = 0; screenY <= 7; screenY++)
			{
				int spritePixelX = xStart;

				for (int screenX = 0; screenX <= 7; screenX++)
				{
					int dX = (8 + spritePixelX - offsetX) % 8;
					int dY = (8 + spritePixelY - offsetY) % 8;

					Color spriteColor = flipAxis
						? _spriteMap.Pixels[spritePixelX0 + dY, spritePixelY0 + dX]
						: _spriteMap.Pixels[spritePixelX0 + dX, spritePixelY0 + dY];

					if (transparent)
					{
						Color screenColor = display.Screen[screenX, screenY];

						spriteColor = GetTransparentPixel(screenColor, spriteColor);
					}

					display.Screen[screenX, screenY] = spriteColor;

					spritePixelX += xStep;
				}

				spritePixelY += yStep;
			}
		}