164 lines
5.2 KiB
Python
164 lines
5.2 KiB
Python
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
# Copyright (c) 2017 Adafruit Industries
|
|
# Author: James DeVito
|
|
# Ported to RGB Display by Melissa LeBlanc-Williams
|
|
#
|
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
# of this software and associated documentation files (the "Software"), to deal
|
|
# in the Software without restriction, including without limitation the rights
|
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
# copies of the Software, and to permit persons to whom the Software is
|
|
# furnished to do so, subject to the following conditions:
|
|
#
|
|
# The above copyright notice and this permission notice shall be included in
|
|
# all copies or substantial portions of the Software.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
# THE SOFTWARE.
|
|
|
|
# This example is for use on (Linux) computers that are using CPython with
|
|
# Adafruit Blinka to support CircuitPython libraries. CircuitPython does
|
|
# not support PIL/pillow (python imaging library)!
|
|
"""
|
|
This example is for use on (Linux) computers that are using CPython with
|
|
Adafruit Blinka to support CircuitPython libraries. CircuitPython does
|
|
not support PIL/pillow (python imaging library)!
|
|
"""
|
|
|
|
import random
|
|
import time
|
|
from colorsys import hsv_to_rgb
|
|
|
|
import board
|
|
from digitalio import DigitalInOut, Direction
|
|
from PIL import Image, ImageDraw, ImageFont
|
|
|
|
from adafruit_rgb_display import st7789
|
|
import old_app
|
|
|
|
# Create the display
|
|
cs_pin = DigitalInOut(board.CE0)
|
|
dc_pin = DigitalInOut(board.D25)
|
|
reset_pin = DigitalInOut(board.D24)
|
|
BAUDRATE = 24000000
|
|
|
|
spi = board.SPI()
|
|
disp = st7789.ST7789(
|
|
spi,
|
|
height=240,
|
|
y_offset=80,
|
|
rotation=180,
|
|
cs=cs_pin,
|
|
dc=dc_pin,
|
|
rst=reset_pin,
|
|
baudrate=BAUDRATE,
|
|
)
|
|
|
|
# Input pins:
|
|
button_A = DigitalInOut(board.D5)
|
|
button_A.direction = Direction.INPUT
|
|
|
|
button_B = DigitalInOut(board.D6)
|
|
button_B.direction = Direction.INPUT
|
|
|
|
button_L = DigitalInOut(board.D27)
|
|
button_L.direction = Direction.INPUT
|
|
|
|
button_R = DigitalInOut(board.D23)
|
|
button_R.direction = Direction.INPUT
|
|
|
|
button_U = DigitalInOut(board.D17)
|
|
button_U.direction = Direction.INPUT
|
|
|
|
button_D = DigitalInOut(board.D22)
|
|
button_D.direction = Direction.INPUT
|
|
|
|
button_C = DigitalInOut(board.D4)
|
|
button_C.direction = Direction.INPUT
|
|
|
|
# Turn on the Backlight
|
|
backlight = DigitalInOut(board.D26)
|
|
backlight.switch_to_output()
|
|
backlight.value = True
|
|
|
|
# Create blank image for drawing.
|
|
# Make sure to create image with mode 'RGB' for color.
|
|
width = disp.width
|
|
height = disp.height
|
|
image = Image.new("RGB", (width, height))
|
|
|
|
# Get drawing object to draw on image.
|
|
draw = ImageDraw.Draw(image)
|
|
|
|
# Clear display.
|
|
draw.rectangle((0, 0, width, height), outline=0, fill=(255, 0, 0))
|
|
disp.image(image)
|
|
|
|
# Get drawing object to draw on image.
|
|
draw = ImageDraw.Draw(image)
|
|
|
|
# Draw a black filled box to clear the image.
|
|
draw.rectangle((0, 0, width, height), outline=0, fill=0)
|
|
|
|
udlr_fill = "#00FF00"
|
|
udlr_outline = "#00FFFF"
|
|
button_fill = "#FF00FF"
|
|
button_outline = "#FFFFFF"
|
|
|
|
fnt = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", 30)
|
|
|
|
while True:
|
|
up_fill = 0
|
|
if not button_U.value: # up pressed
|
|
up_fill = udlr_fill
|
|
draw.polygon([(40, 40), (60, 4), (80, 40)], outline=udlr_outline, fill=up_fill) # Up
|
|
|
|
down_fill = 0
|
|
if not button_D.value: # down pressed
|
|
down_fill = udlr_fill
|
|
draw.polygon([(60, 120), (80, 84), (40, 84)], outline=udlr_outline, fill=down_fill) # down
|
|
|
|
left_fill = 0
|
|
if not button_L.value: # left pressed
|
|
left_fill = udlr_fill
|
|
draw.polygon([(0, 60), (36, 42), (36, 81)], outline=udlr_outline, fill=left_fill) # left
|
|
|
|
right_fill = 0
|
|
if not button_R.value: # right pressed
|
|
right_fill = udlr_fill
|
|
draw.polygon([(120, 60), (84, 42), (84, 82)], outline=udlr_outline, fill=right_fill) # right
|
|
|
|
center_fill = 0
|
|
if not button_C.value: # center pressed
|
|
center_fill = button_fill
|
|
draw.rectangle((40, 44, 80, 80), outline=button_outline, fill=center_fill) # center
|
|
|
|
A_fill = 0
|
|
if not button_A.value: # left pressed
|
|
A_fill = button_fill
|
|
draw.ellipse((140, 80, 180, 120), outline=button_outline, fill=A_fill) # A button
|
|
|
|
B_fill = 0
|
|
if not button_B.value: # left pressed
|
|
B_fill = button_fill
|
|
draw.ellipse((190, 40, 230, 80), outline=button_outline, fill=B_fill) # B button
|
|
|
|
# make a random color and print text
|
|
rcolor = tuple(int(x * 255) for x in hsv_to_rgb(random.random(), 1, 1))
|
|
draw.text((20, 150), "Hello World", font=fnt, fill=rcolor)
|
|
rcolor = tuple(int(x * 255) for x in hsv_to_rgb(random.random(), 1, 1))
|
|
draw.text((20, 180), "Hello World", font=fnt, fill=rcolor)
|
|
rcolor = tuple(int(x * 255) for x in hsv_to_rgb(random.random(), 1, 1))
|
|
draw.text((20, 210), "Hello World", font=fnt, fill=rcolor)
|
|
|
|
# Display the Image
|
|
disp.image(image)
|
|
|
|
time.sleep(0.1) |